Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Какой индекс быстрее?
 
 автор: Eugene77   (25.01.2009 в 09:32)   письмо автору
 
 

Таблица динамического формата MyISAM размером 150 М.
Когда я читаю строку используя PRIMARY KEY запрос занимает 2-6 секунд.
Проиндексировал один из текстовых столбцов. Когда выборка идёт по нему -
время выборки 0.06 секунд.
Что это получается: PRIMARY KEY вообще бесполезен?
Или у меня что-то с головой?
Зачем его вообще тогда придумали? Может бытьтолько для маленьких таблиц?

  Ответить  
 
 автор: cheops   (25.01.2009 в 13:08)   письмо автору
 
   для: Eugene77   (25.01.2009 в 09:32)
 

Хм... а можно запросы увидеть? Вообще не должно бы такого быть.

  Ответить  
 
 автор: Eugene77   (25.01.2009 в 19:55)   письмо автору
 
   для: cheops   (25.01.2009 в 13:08)
 


CREATE TABLE `be` (
 `num` int(4) unsigned NOT NULL auto_increment,
 `key` varchar(200) NOT NULL ,
 `describe` text NOT NULL,
 PRIMARY KEY  (`num`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

Отображает строки 69840 - 69869 (198,625 всего, запрос занял 6.2676 сек.)
SQL-запрос:
SELECT * 
FROM `be` 
LIMIT 69840 , 30



А второй (быстрый) запрос по индексированому столбцу:
 
SELECT * 
FROM `be` 
WHERE
`key` = 'нужное слово'

  Ответить  
 
 автор: Trianon   (25.01.2009 в 20:18)   письмо автору
 
   для: Eugene77   (25.01.2009 в 19:55)
 

SQL-запрос SELECT * FROM `be` LIMIT 69840 , 30 - это вовсе не запрос по primary key .
Этот запрос заставляет извлечь эти 70 тысяч строк и выкинуть их. На это требуется время.
Запрос по primary key - нечто вроде
SELECT * FROM `be` WHERE `num` BETWEEN 69841 AND  69870

Вы explain выполняли? Он Вам сказал, что primary key применять будет?

  Ответить  
 
 автор: Eugene77   (26.01.2009 в 15:51)   письмо автору
 
   для: Trianon   (25.01.2009 в 20:18)
 

Понятно!
Надо быть осторожным с MySQL.
Не надеяться на встроенный оптимизатор.
Спасибо!

  Ответить  
 
 автор: Eugene77   (25.01.2009 в 19:58)   письмо автору
 
   для: cheops   (25.01.2009 в 13:08)
 

/////

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования