Задавайте вопросы, мы ответим
Вы не зашли.
Есть список слов с их определениями, поиск по которым будет осуществляться по первой букве алфавита. (Есть список из букв, если пользователь нажал на К) - выведутся все слова, которые начинаются на К.
Вопрос: как (и почему) наиболее оптимально создать таблицу и запрос
Мое предположение: таблица с префиксным индексом длинной 1 на поле с названием слова и выборка из нее всех значений, для которых первая буква = нужной
CREATE TABLE IF NOT EXISTS `words` (
`id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) DEFAULT NULL,
`definition` text,
PRIMARY KEY (`id`),
KEY `name` (`name`(1))
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
FROM `words` WHERE LEFT( name, 1 ) = 'K'
Но explain говорит, что индекс не используется...
Отредактированно nikolajtesla (21.10.2010 14:02:01)
Неактивен
Если над полем выполняется какое-нибудь действие, то индекс использоваться не будет.
Например, если вы перепишите как
FROM `words` WHERE name LIKE 'K%'
то индекс использоваться будет.
Неактивен
Спасибо большое. Я почему-то считал, что как раз с LIKE индекс то и не используется.
Не могли бы Вы так же подсказать является ли целесообразно ставить префиксный индекс на первый символ поля. Так как всего различных значений будет довольно маленькое количество <33
Неактивен
Можно, конечно, и префиксный индекс, но тогда если Вы будете искать
LIKE 'Кы%', то уже будете искать, вытаскивая все записи, начинающиеся
на К, а не только те, которые начинаются на Кы.
Неактивен