оптимизация SQL запроса

niXman
Дата: 23.01.2013 03:46:29
привет.

колонка code_id типа varchar(32).
в таблице ~300000 строк.

запрос для проверки присутствия в БД какого-то конкретного code_id занимает ~2 сек., что нереально долго.
> SELECT EXISTS(SELECT 1 FROM table WHERE code_id='any_code_id') AS result"

попробовал конкретизировать запрос еще и по длине code_id так:
> SELECT EXISTS(SELECT 1 FROM table WHERE LENGTH(code_id)=".strlen($code_id)." AND code_id='any_code_id') AS result"

но никакого профита не вижу.

вопрос в том, каким образом можно оптимизировать запрос/таблицу?

спасибо.
javajdbc
Дата: 23.01.2013 04:04:09
niXman,

создате индекс по этому полю

create index idx33 on table_name(column_name)
niXman
Дата: 23.01.2013 04:31:12
javajdbc, да, вариант.
я тут еще что подумал.. строки, находящиеся в code_id, если прогнать через некоторый алгоритм, дают уникальные десятичные значения.
скажите, если я в таблицу добавлю столбец code_dec, и для select`а так же буду использовать десятичное значение соответствующее конкретному code_id, это ускорит выборку?
tanglir
Дата: 23.01.2013 05:26:53
niXman, скорее всего да. Если сделать индекс на это поле и вести поиск только по нему.
niXman
Дата: 23.01.2013 10:25:34
tanglir, Ваш ответ отвечает на топик, или на предыдущий мой пост?
tanglir
Дата: 23.01.2013 10:37:13
niXman, на предыдущий пост.
+
я ещё не дожил до того, чтобы отвечать "да" на вопрос "каким образом" :)
niXman
Дата: 23.01.2013 10:45:25
tanglir, понял, спасибо.
в общем, попробую оба способа и отпишусь о результате.
niXman
Дата: 23.01.2013 11:05:23
tanglir, позвольте оффтопный вопрос...

+

mysql, при поиске по столбцу типа varchar, использует тупой перебор?
как-то мне логика подсказывает, что для этого, в худшем случае должен использоваться хеш, или в лучшем - префиксное дерево.
niXman
Дата: 23.01.2013 11:40:24
прочел доку по индексам, и не понял, для чего нужно указывать index_name, и нужно ли как-то/где-то использовать этот index_name?

спасибо.
miksoft
Дата: 23.01.2013 11:52:50
niXman
прочел доку по индексам, и не понял, для чего нужно указывать index_name, и нужно ли как-то/где-то использовать этот index_name?

спасибо.
Хотя бы для того, чтобы потом его можно было грохнуть. Еще чтобы видеть это имя в планах запросов.