Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Оптимизация Индексы и ORDER BY
Форумы портала PHP.SU » PHP » SQL и Архитектура БД » Оптимизация Индексы и ORDER BY

Страниц (1): [1]
 

1. Andrew73 - 02 Июля, 2011 - 17:19:49 - перейти к сообщению
Ребята, подскажите
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM TABLE
  3. WHERE city=31 AND user=3
  4.  

Тут понятно, что составной индекс (city, user)
А если еще добавляется ORDER BY
CODE (SQL):
скопировать код в буфер обмена
  1.  
  2. SELECT * FROM TABLE
  3. WHERE city=31 AND user=3
  4. ORDER BY id DESC
  5.  

Нужно ли ключ делать учитывая ORDER BY?
составной индекс (city, user, id)
если да , то как правильно
(city, user, id) или (id, city, user) ?


Спасибо
2. Мелкий - 02 Июля, 2011 - 17:33:41 - перейти к сообщению
Смотрите explain.
3. Champion - 03 Июля, 2011 - 19:01:50 - перейти к сообщению
Для конкретно этого запроса идеально будет составной индекс по (city, user) и второй индекс по (id).
Возможно, что (city, user, id) тоже подойдет. Создайте и так, и так, гляньте explain
4. Andrew73 - 04 Июля, 2011 - 10:26:48 - перейти к сообщению
Создал сначала (city, user, id)
rows = 1037
Удалил, создал другой (city, user)
rows = 7
вроде бы получше
но смущает что ORDER BY id DESC, зная что при большом кол-ве записей DESC тяжелый. Возможно не прав
Поправьте плиз, как все же правильно?

 

Powered by ExBB FM 1.0 RC1