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

Форум MySQL

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

 

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

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

тема: оптимизация
 
 автор: Axxil   (21.11.2007 в 15:01)   письмо автору
 
 

Сегодня в целях оптимизации игрался с запросами и обнаружил такую штуку:
Запрос выводит записи из некоторой таблицы постранично.
Так вот, обычный в таких случаях запрос

SELECT * 
FROM table1 
WHERE some_id = 0
LIMIT 43875, 15

выполняется гораздо медленнее, чем тот же по результату:

SELECT * 
FROM table1 
WHERE Id>=43875
AND some_id = 0
LIMIT 0, 15


почему так?

И ещё одно интересное наблюдение:

SELECT * 
FROM table1 
WHERE Id>=43875
AND some_id <= 0
LIMIT 0, 15

выполняется быстрее чем

SELECT * 
FROM table1 
WHERE Id>=43875
AND some_id = 0
LIMIT 0, 15


вот это вообще для меня сюрприз...

   
 
 автор: Trianon   (21.11.2007 в 15:13)   письмо автору
 
   для: Axxil   (21.11.2007 в 15:01)
 

Первый из запросов не имеет смысла, поскольку LIMIT не снабжен ORDER BY
Второй, вероятно, выполняется быстрее, т.к. пробег идет по первичному ключу, а не по данным.
Вообще же нужно смотреть план исполнения запроса (оператор EXPLAIN)

   
 
 автор: Axxil   (21.11.2007 в 15:36)   письмо автору
 
   для: Trianon   (21.11.2007 в 15:13)
 

Причём тут ORDER BY?
поставил сортировку по первичному (автоинкремент) ключу (ORDER BY entity_id) скорость не изменилась...

А как тут explain поможет? Тут же нет объединения таблиц или использования индексов. Просто обычная выборка из одной таблицы...

Я так понимаю тут оптимизатор мускульный как-то хитро работает?

   
 
 автор: Trianon   (21.11.2007 в 19:42)   письмо автору
 
   для: Axxil   (21.11.2007 в 15:36)
 

> Причём тут ORDER BY?

А что, по Вашему, означает SELECT * FROM tbl LIMIT n ?


>поставил сортировку по первичному (автоинкремент) ключу (ORDER BY entity_id) скорость не изменилась...
>А как тут explain поможет?

Покажет, применяются ли индексы, и если да - то какие.

   
 
 автор: Axxil   (22.11.2007 в 09:28)   письмо автору
 
   для: Trianon   (21.11.2007 в 19:42)
 

-

   
 
 автор: cheops   (22.11.2007 в 12:11)   письмо автору
 
   для: Axxil   (21.11.2007 в 15:01)
 

Хорошо бы посмотреть структуру таблицы some_id (оператор SHOW CREATE TABLE).

   
 
 автор: Axxil   (22.11.2007 в 12:38)   письмо автору
 
   для: cheops   (22.11.2007 в 12:11)
 


CREATE TABLE `table1` (
  `entity_id` int(11) NOT NULL auto_increment,
  `make_date` datetime,
  `name` char(255),
  `surname` char(255),
  `email` char(255),
  `city` char(255),
  `parent_id` int(11) default '0',
  PRIMARY KEY  (`Id`),
  KEY `parent` (`parent_id`)
) TYPE=MyISAM;


Мне интересно это обычное поведение MySQL или так получается из-за очобенностей структуры таблицы? (хотя зацепится тут можно только за KEY 'parent')

   
Rambler's Top100
вверх

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