SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 21.10.2010 13:08:55

nikolajtesla
Завсегдатай
Зарегистрирован: 12.10.2010
Сообщений: 25

prefix index

Есть список слов с их определениями, поиск по которым будет осуществляться по первой букве алфавита. (Есть список из букв, если пользователь нажал на К) - выведутся все слова, которые начинаются на К.

Вопрос: как (и почему) наиболее оптимально создать таблицу и запрос

Мое предположение: таблица с префиксным индексом длинной 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)

Неактивен

 

#2 21.10.2010 14:49:11

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: prefix index

Если над полем выполняется какое-нибудь действие, то индекс использоваться не будет.

Например, если вы перепишите как
FROM `words` WHERE  name LIKE 'K%'
то индекс использоваться будет.

Неактивен

 

#3 21.10.2010 16:28:12

nikolajtesla
Завсегдатай
Зарегистрирован: 12.10.2010
Сообщений: 25

Re: prefix index

Спасибо большое. Я почему-то считал, что как раз с LIKE индекс то и не используется.
Не могли бы Вы так же подсказать является ли целесообразно ставить префиксный индекс на первый символ поля. Так как всего различных значений будет довольно маленькое количество <33

Неактивен

 

#4 21.10.2010 22:56:33

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: prefix index

Можно, конечно, и префиксный индекс, но тогда если Вы будете искать
LIKE 'Кы%', то уже будете искать, вытаскивая все записи, начинающиеся
на К, а не только те, которые начинаются на Кы.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson