|
|
|
Интересный глюк LIKE
|
|||
|---|---|---|---|
|
#18+
Есть таблица CREATE TABLE `группы` ( Код varchar(10) NOT NULL default '', Группа varchar(70) default NULL, PRIMARY KEY (Код) ) заполнена она пимерно так INSERT INTO группы VALUES ('0', 'ВСЕ'); INSERT INTO группы VALUES ('00', 'Действующие'); INSERT INTO группы VALUES ('000', 'Мониторинг'); INSERT INTO группы VALUES ('0000', 'ТСО-объекты'); INSERT INTO группы VALUES ('2001', 'ОФИС'); INSERT INTO группы VALUES ('100100', 'Обслуживание УО'); пишем запрос EXPLAIN SELECT * FROM `группы` WHERE Код LIKE '0%' результат : |select_type | table | possible_keys | key | rows | Extra |SIMPLE | группы | PRIMARY | NULL | 68 |Using where То есть ключ PRIMARY KEY (Код) НЕ ИСПОЛЬЗУЕТСЯ!!!! теперь другой запрос EXPLAIN SELECT * FROM `д_группы доступа` WHERE Код LIKE '1%' результат : | select_type | table | possible_keys | key | key_len | rows | Extra | SIMPLE | группы | PRIMARY |PRIMARY | 10 | 1 |Using where Здесь ключ ИСПОЛЬЗУЕТСЯ! причем он будет использоваться и с LIKE '2%' LIKE '3%' и т.д Почему так происходит? неужели все дело в том что значение начинается с '0'??? Подскажите, а то править всю БД не хочется из-за этого глюка! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 14:56:43 |
|
||
|
Интересный глюк LIKE
|
|||
|---|---|---|---|
|
#18+
У вас в EXPLAIN указаны разные таблицы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:25:24 |
|
||
|
Интересный глюк LIKE
|
|||
|---|---|---|---|
|
#18+
Да это опечатка просто, одна таблица! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:28:01 |
|
||
|
Интересный глюк LIKE
|
|||
|---|---|---|---|
|
#18+
Сколько записей в таблице? Можно заставить использовать индекс, но это будет менее эффективно. Смысл же в том, что использование индексов на строковых полях основано на кол-ве вхождения симвода сначала строки. Понимать это так, если у тебя 0(ноль) в большинстве строк первый символ, тогда париться с индексом для сервера лень, легче сделать скан таблицы. в других случаях быстрее перелопатить индекс. Достаточно понятно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:30:48 |
|
||
|
Интересный глюк LIKE
|
|||
|---|---|---|---|
|
#18+
Кстати, наличие таких запросов говорит о том, что в поле Код хранятся не атомарные значения, а это плохая практика. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:32:56 |
|
||
|
Интересный глюк LIKE
|
|||
|---|---|---|---|
|
#18+
Все ясно придется перелапачивать всю таблицу! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 15:34:48 |
|
||
|
Интересный глюк LIKE
|
|||
|---|---|---|---|
|
#18+
zam-ministraВсе ясно придется перелапачивать всю таблицу! зачем? я что непонятно сказал? если сервер не использует индекс - значит это самый быстрый способ отфильтровки значений. можешь написать force index(ИМЯ_ИНДЕКСА) после имени таблицы и посмотреть скорость выполнения ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.09.2005, 16:16:36 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=33258962&tid=1853689]: |
0ms |
get settings: |
10ms |
get forum list: |
21ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
211ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 236ms |
| total: | 546ms |

| 0 / 0 |
