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

Форум MySQL

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

 

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

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

тема: Использование индексов
 
 автор: Ученик   (03.06.2008 в 16:45)   письмо автору
 
 

Есть такая таблица
CREATE TABLE IF NOT EXISTS `prod` (
  `prod_desc_id` tinyint(2) unsigned NOT NULL default '0',
  `post_id` int(10) unsigned NOT NULL default '0',
  `money` mediumint(6) unsigned NOT NULL default '0',
  `user_id` mediumint(6) NOT NULL default '0',
  `unixdate` int(10) NOT NULL default '0',
  PRIMARY KEY  (`unixdate`,`user_id`,`prod_desc_id`,`post_id`),
  KEY `fight_id` (`post_id`),
  KEY `prod_desc_id` (`prod_desc_id`),
  KEY `unixdate` (`unixdate`),
  KEY `user_id` (`user_id`),
  KEY `money` (`money`)
) ENGINE=MyISAM DEFAULTCHARSET=utf8;


Самая частая выборка вот такая

SELECT * FROM `prod` d 
 WHERE d.user_id = 1 AND unixdate BETWEEN 1211227200 AND 1211313599


Запросы выполняются не долго но посмотрев EXPLAIN я обратил внимание что он не использует ключ unixdate тоесть затрагиваются теже ряды если не указать интервал даты. Используется только ключ user_id
SELECT * FROM `prod` d 
 WHERE d.user_id = 1


Подскажите в чем может быть проблема, или может как то можно оптимизировать текущий набор индексов?

   
 
 автор: cheops   (04.06.2008 в 01:41)   письмо автору
 
   для: Ученик   (03.06.2008 в 16:45)
 

Чтобы индекс использовался в первом запросе придётся создать ещё один индекс по двум столбцам, user_id и unixdate. Иначе будет использоваться лишь один из них (кстати, можно явно указать какой ключ следует использовать).

   
 
 автор: Ученик   (04.06.2008 в 12:37)   письмо автору
 
   для: cheops   (04.06.2008 в 01:41)
 

И правда помогло, спасибо!

Только вот я непонял в чем была пробелма раньше, я знал что этот способ должен помочь, но не создавал еще один индекс а добавлял к user_id unixdate. Результат был тот же, сейчас уже думаю может причина была в том что я не сбрасывал ("FLUSH") кеш таблицы между тестами запросов...

   
Rambler's Top100
вверх

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