powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Интересный глюк LIKE
7 сообщений из 7, страница 1 из 1
Интересный глюк LIKE
    #33258962
zam-ministra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица
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'??? Подскажите, а то править всю БД не хочется из-за этого глюка!
...
Рейтинг: 0 / 0
Интересный глюк LIKE
    #33259078
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас в EXPLAIN указаны разные таблицы.
...
Рейтинг: 0 / 0
Интересный глюк LIKE
    #33259084
zam-ministra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да это опечатка просто, одна таблица!
...
Рейтинг: 0 / 0
Интересный глюк LIKE
    #33259091
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сколько записей в таблице?
Можно заставить использовать индекс, но это будет менее эффективно.
Смысл же в том, что использование индексов на строковых полях основано на кол-ве вхождения симвода сначала строки.
Понимать это так, если у тебя 0(ноль) в большинстве строк первый символ, тогда париться с индексом для сервера лень, легче сделать скан таблицы.
в других случаях быстрее перелопатить индекс.

Достаточно понятно?
...
Рейтинг: 0 / 0
Интересный глюк LIKE
    #33259103
DocAl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, наличие таких запросов говорит о том, что в поле Код хранятся не атомарные значения, а это плохая практика.
...
Рейтинг: 0 / 0
Интересный глюк LIKE
    #33259112
zam-ministra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все ясно придется перелапачивать всю таблицу!
...
Рейтинг: 0 / 0
Интересный глюк LIKE
    #33259285
Фотография Валентин К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
zam-ministraВсе ясно придется перелапачивать всю таблицу!
зачем?
я что непонятно сказал? если сервер не использует индекс - значит это самый быстрый способ отфильтровки значений.

можешь написать force index(ИМЯ_ИНДЕКСА) после имени таблицы и посмотреть скорость выполнения
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Интересный глюк LIKE
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]