Задавайте вопросы, мы ответим
Вы не зашли.
Страниц: 1
приветствую.
может, кому-то вопрос покажется идиотским, но всё же...
есть таблица:
CREATE TABLE wd (ID INTEGER PRIMARY KEY, word VARCHAR[40], description TEXT);
есть индекс:
CREATE INDEX Word_index ON wd (word);
так вот, как указать интерпретатору mySQL, что значения поля word уже отсортированы по алфавиту?
возможно ли это?
и даст ли это выигрыш в скорости SELECT по word?
если нет, то как еще можно ускорить выборку?
Неактивен
Я уже эксперементировал с индексами при наличии в таблице 10000 записей поиск нужной осуществляется в 10 раз быстрее. А зачем create index? Не проще ли при создании таблицы объявлять индексы?
CREATE TABLE `comments` (
`id` INT( 255 ) NOT NULL AUTO_INCREMENT ,
`theme_id` INT( 255 ) NOT NULL ,
`cat_id` INT( 255 ) NOT NULL ,
`uid` INT( 255 ) NOT NULL ,
`author` VARCHAR( 25 ) NOT NULL ,
`datetime` VARCHAR( 25 ) NOT NULL ,
`ip` VARCHAR( 25 ) NOT NULL ,
`comment` VARCHAR( 1024 ) NOT NULL ,
INDEX ( `id` ) ,
INDEX ( `theme_id` ) ,
INDEX ( `cat_id` ) ,
INDEX ( `uid` )
) CHARACTER SET cp1251 COLLATE cp1251_general_ci
Неактивен
Объявлять индексы внутри создания таблицы или отдельно — не имеет никакого
значения, конечно.
Если над колонкой есть индекс, то в принципе совершенно не важно — сортированы
там данные или нет. Объяснить серверу это никак нельзя (хотя и можно отсортировать
табличку по какой-то колонке, сервер эту информацию никак использовать не
сможет).
Ускорить выборку по ключу у Вас тоже вряд ли получится. Можно попробовать делать
индекс не по всей строке, а, например, по подстроке (ADD INDEX (word(20))) — индексы
так будут чуть короче и, возможно, вы сможете выиграть несколько микросекунд (а
можете и потерять, все зависит от данных), но, кажется, такие микрооптимизации
могут быть полезными только теоретически — практически разницы Вы не заметите.
Неактивен
Страниц: 1