|
|
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
- есть поле char(4) c индексом, в котором хранится строковый идентификатор, который обозначает тип объекта - всего в системе 30-40 типов объектов, ну может быть 50-60, но порядок именно такой - десятки, не сотни и не тысячи пара вопросов: 1) насколько существенна разница в скорости обработки join запросов между строкой type = 'ab' и строкой type = 'abcd' 2) в чем принципиальная разница между размещением условия на фильтрацию этого поля, размещая в условиях джоина join on (... and type = 'ab') vs вариант с размещением этого условия в where-секции, то есть вот так join on (...) where type = 'ab' ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 16:25:21 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
Lumix1) насколько существенна разница в скорости обработки join запросов между строкой type = 'ab' и строкой type = 'abcd'Смотря на каком фоне сравнивать. Для искусственных запросов вида SELECT id FROM mytable WHERE type = 'ab' при тысячах выбираемых записей это будет заметно. В большинстве реальных запросов на фоне сложной логики, подзапросов, сортировок и т.п. это будет почти незаметно. Lumix2) в чем принципиальная разница между размещением условия на фильтрацию этого поля, размещая в условиях джоина join on (... and type = 'ab') vs вариант с размещением этого условия в where-секции, то есть вот так join on (...) where type = 'ab'Если общая логика запроса идентична, то без разницы. Для внешних JOIN-ов, разумеется, общая логика будет нарушена и сравнение некорректно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 16:33:59 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
miksoft, ок, будем тогда использовать как можно меньше букв ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 16:42:36 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
miksoftДля искусственных запросов вида SELECT id FROM mytable WHERE type = 'ab' при тысячах выбираемых записей это будет заметно.Честно говоря, не вижу разницы в поиске 'abcd' и, после приведения типов (char(4)), 'ab__' Что касается varchar... наверное, разница есть, но, при n-арном поиске в индексе, - вряд ли заслуживающая упоминания... Впрочем, могу ошибаться в особенностях MySQL :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 17:04:16 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
Cygapb-007miksoftДля искусственных запросов вида SELECT id FROM mytable WHERE type = 'ab' при тысячах выбираемых записей это будет заметно.Честно говоря, не вижу разницы в поиске 'abcd' и, после приведения типов (char(4)), 'ab__'Если в обоих случаях тип char(4), то разницы не будет. Я подразумевал разницу между char(2) и char(4) (из заголовк топика). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 17:07:31 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
Lumixmiksoft, ок, будем тогда использовать как можно меньше буквА нужны именно буквы? Исходя из первого поста, достаточно однобайтового целого числа. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 17:08:37 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
miksoftLumixmiksoft, ок, будем тогда использовать как можно меньше буквА нужны именно буквы? Исходя из первого поста, достаточно однобайтового целого числа.Плюс еще одна табличка с расшифровкой кода ;-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 17:10:06 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
Cygapb-007miksoftпропущено... А нужны именно буквы? Исходя из первого поста, достаточно однобайтового целого числа.Плюс еще одна табличка с расшифровкой кода ;-)При нескольких десятках двухбуквенных сочетаний, подозреваю, ее все равно не избежать :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 17:14:39 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
Lumix- есть поле char(4) c индексом, в котором хранится строковый идентификатор, который обозначает тип объекта - всего в системе 30-40 типов объектов, ну может быть 50-60, но порядок именно такой - десятки, не сотни и не тысячи пара вопросов: 1) насколько существенна разница в скорости обработки join запросов между строкой type = 'ab' и строкой type = 'abcd' 2) в чем принципиальная разница между размещением условия на фильтрацию этого поля, размещая в условиях джоина join on (... and type = 'ab') vs вариант с размещением этого условия в where-секции, то есть вот так join on (...) where type = 'ab' нет никакой разницы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 17:40:36 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
miksoftCygapb-007пропущено... Честно говоря, не вижу разницы в поиске 'abcd' и, после приведения типов (char(4)), 'ab__'Если в обоих случаях тип char(4), то разницы не будет. Я подразумевал разницу между char(2) и char(4) (из заголовк топика). Я, конечно, приношу извинения, что внес небольшую путаницу, но в данном случае эта путаница оказалось полезной, потому что я узнал для себя много новых ньюансов. Раз уже зашла такая маза, то осталось спросить как в этом случае будет вести себя char(4) но с индекском char(2)? ближе к скорости char(4) или ближе к скорости к char(2) или вообще это как бы почти что char(3)? А информация о том, что type = 'ab' и type = 'abcd' на char(4) имеют одинаковую скорость поиска - это очень крутая информация. Спасибо!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 20:57:47 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
miksoftCygapb-007пропущено... Плюс еще одна табличка с расшифровкой кода ;-)При нескольких десятках двухбуквенных сочетаний, подозреваю, ее все равно не избежать :) Ну, конечно, всем понятно, что на интах будет летать шустрее всего. Но с буквами проще производить отладку системы. Мы уже давно пользуемся этим приемом и поэтому тихим субботним вечером в этой теме я лишь хотел узнать цену подобного технического решения, то есть насколько сильно мы теряем. В данном случае, я понял, что когда задан char, то можно смело пользоваться идентификаторами на всю его длину. Что касается таблицы с расшифровками, то этого не требуется, потому что буквы означают таблицы, которые используются в системе. Две буквы приходиться использовать когда в системе есть таблица pages и posts, тогда не понятно что означает буква 'p', поэтому мы используем 'pa' и 'po' В результате же сегодняшней темы, я уже написал всем рассылку, что можно смело использовать 'page' и 'post', потому что скорость все равно будет та же самая. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 21:05:51 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
LumixА информация о том, что type = 'ab' и type = 'abcd' на char(4) имеют одинаковую скорость поиска - это очень крутая информация.Да нет в этом ничего особенно крутого. Разница если и была бы, то мизерная. Не вижу смысла заморачиваться на такого рода мелочи в малых и средних проектах. А когда дорастет до крупных - там, опять же, покрупнее проблемы вылезут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 22:13:14 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
Lumixбуквы означают таблицы, которые используются в системеНе знаю почему, но мне этот метод очень не нравится. Попахивает плохим проектированием БД. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 22:14:51 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
miksoftLumixбуквы означают таблицы, которые используются в системеНе знаю почему, но мне этот метод очень не нравится. Попахивает плохим проектированием БД. в этой таблице хранятся флаги по каждому пользователю в отношении разных объектов Код: sql 1. по общечеловеческим понятиям вместо tableMark на каждую таблицу создается своя таблица, а у нас одна общая таблица но в ней как бы "флаг" tableMark который за неё и отвечает ну а чтобы тогглы робили на insert ... update on duplicate key мы юзаем констранту unique(userId, tableMark, tableRowId) может и кривовато с точки зрения науки, но в реале пока полет нормальный... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.09.2015, 22:49:00 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
LumixРаз уже зашла такая маза, то осталось спросить как в этом случае будет вести себя char(4) но с индекском char(2)? ближе к скорости char(4) или ближе к скорости к char(2) или вообще это как бы почти что char(3)? Мужчина, ну и проблемы, блин, у тебя... мне бы такие. Поле делай varchar(255). Индекс делай на поле целиком. ВСЁ. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2015, 10:09:18 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
[quot Lumix Ну, конечно, всем понятно, что на интах будет летать шустрее всего. Но с буквами проще производить отладку системы. [/quot] Мужчина, все СУБД работают со скоростью, пропорциональной скорости чтения диска, и, соответственно, обратно пропорциональной количеству чтений с диска. Тебе надо напоминать, что скорости обработки данных в памяти в тысячу-сто тысяч раз быстрее, чем чтение с диска ? Именно поэтому типы данных в таблицах не имеют для скорости их обработки практически никакого значения. Ты должен выбирать типы данных, основываясь на предметной области приложения и требовании доменной целостности данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2015, 10:14:35 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
MasterZiv, ок! Спасибо!! Особенно очень ценно про диски и память. Изначально в основе всей этой ветки не было какой-то конкретной проблемы, которая прямо сейчас остановила весь продакшен. В основу этой ветки были положены какие-то мелкие глубинные давние страхи, которые появилось время развеять и я их развеял. В простонародье эти страхи вообще именуют "тараканами в голове". Вот я этих тараканов почистил и теперь с чистой душой буду воспринимать все те типы данных, которые сейчас используются в продакшене. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2015, 21:22:06 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
Lumix, Против такого рода "тараканов" помогает качественно проведенное тестирование. Грубо говоря - надо взять и попробовать. Это помогает куда лучше, чем буквы на форуме. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.09.2015, 21:53:41 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
miksoft, неее... сколько тестов не проводили, тараканы все равно остаются. А вот пообщались тут предметно за выхи и они все сдохли. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 00:20:37 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
пока есть время, сделал тест (для особо придирчивых - в ЛОБ, не вдаваясь в объем ОЗУ и настроек системы) тестовая таблица 3 млн записей вставлялись за 3 раза RAND()*100 и RAND()*10000 в p1 CHAR(2) и p2 CHAR(4) (думал разбросать индекс чуть-чуть по диску механически...) indexP1 key len 7 indexP2 key len 13 селективность indexP1 1% селективность indexP2 0,01% запрос1 WHERE param1="12" 30000 записей 1,5 сек запрос2 WHERE param2="1234" 300 записей 0,5 сек в то же время были удалены все записи с p1="45" и p2="4545" и добавлены заново 1000 записей (45,4545) - селективность - мизер запрос1 SELECT SQL_NO_CACHE ... WHERE param1="45" 1000 записей 0,01 сек запрос2 WHERE SQL_NO_CACHE ... WHERE param2="4545" 1000 записей 0,01 сек практически от длины поля и индекса время выполнения не зависит, только от селективности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 11:11:08 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
поправлюсь Alex_Ustinov... практически от длины поля и индекса время выполнения не зависит, только от селективности И КОЛИЧЕСТВА ДАННЫХ в ВЫБОРКЕ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 11:22:06 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
LumixMasterZiv, ок! Спасибо!! Особенно очень ценно про диски и память. Изначально в основе всей этой ветки не было какой-то конкретной проблемы, которая прямо сейчас остановила весь продакшен. В основу этой ветки были положены какие-то мелкие глубинные давние страхи, которые появилось время развеять и я их развеял. В простонародье эти страхи вообще именуют "тараканами в голове". Вот я этих тараканов почистил и теперь с чистой душой буду воспринимать все те типы данных, которые сейчас используются в продакшене. Вот именно. Тебе давно пора перестать бояться и начать делать что-то. А как упрёшься в какие-то проблемы производительности -- будешь думать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 13:18:03 |
|
||
|
char(2) vs char(4)
|
|||
|---|---|---|---|
|
#18+
miksoftLumix, Против такого рода "тараканов" помогает качественно проведенное тестирование. Грубо говоря - надо взять и попробовать. Это помогает куда лучше, чем буквы на форуме. :) Против тараканов помогает опыт. Свой или иногда чужой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.09.2015, 13:18:56 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=39044019&tid=1832743]: |
0ms |
get settings: |
7ms |
get forum list: |
20ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
63ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
80ms |
get tp. blocked users: |
2ms |
| others: | 204ms |
| total: | 399ms |

| 0 / 0 |
