SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 06.01.2011 13:42:40

penegan
Участник
Зарегистрирован: 06.01.2011
Сообщений: 1

Статус Sorting result и Sending data

Добрый день!
Помогите, пожалуйста, разобраться с логикой работы mysql smile

Имеется база данных размером 10 млн. записей весом около 1 Гб тип MyISAM

CREATE TABLE IF NOT EXISTS `9` (
  `P` smallint(6) NOT NULL,
  `D` int(11) NOT NULL,
  `fld1` tinyint(4) NOT NULL,
  `fld2` tinyint(4) NOT NULL,
  `fld3` int(11) NOT NULL,
  UNIQUE KEY `id` (`D`,`fld1`,`fld2`,`fld3`),
  KEY `k1` (`D`,`fld1`,`fld2`,`fld3`,`P`))
 

выполняется следующий запрос:
SELECT * FROM `9` WHERE
`P` < 5000
AND `D`>10000 AND `D` < 400000
AND `fld1` IN (1,2,3,4,5)
AND `fld2` IN (55,33,44,5)
AND `fld3` IN(3,4,5,3)
ORDER BY `P` ASC


Статистика запроса выдает следующее:

Всего:    0.599152
starting    0.000058    
Opening tables    0.000016    
System lock    0.000028    
Table lock    0.000019    
init    0.000028    
optimizing    0.000030    
statistics    0.000406    
preparing    0.000015    
executing    0.000002    
Sorting result    0.360817    
Sending data    0.237658    
end    0.000013    
query end    0.000003    
freeing items    0.000049    
logging slow query    0.000002    
cleaning up    0.000008    


Заметьте, значение полей:
Sorting result    0.360817   
Sending data    0.237658   

Тут я решил ускорить запрос, убрав сортировку ORDER BY `P`, то есть по идеи скорость выполнения запроса должно уменьшится на Sorting result 0.360817, но :
SELECT * FROM `9` WHERE
`P` < 5000
AND `D`>10000 AND `D` < 400000
AND `fld1` IN (1,2,3,4,5)
AND `fld2` IN (55,33,44,5)
AND `fld3` IN(3,4,5,3)


Статистика показала:

Всего:    0.504714
starting    0.000051    
Opening tables    0.000015    
System lock    0.000031    
Table lock    0.000017    
init    0.000027    
optimizing    0.000029    
statistics    0.000435    
preparing    0.000014    
executing    0.000002    
Sending data    0.504044    
end    0.000010    
query end    0.000003    
freeing items    0.000030    
logging slow query    0.000001    
cleaning up    0.000005    
 

Мы видим, что время на сортировку убралось, но увеличилось время sending data, в итоге оптимизация практически ни к чему не привела

главный вопрос: из-за чего увеличилось значение sending data?
ну и вопрос по поводу ключей, правильно ли я их задал для этой таблицы?

Спасибо за помощь!

Отредактированно penegan (06.01.2011 13:44:47)

Неактивен

 

#2 06.01.2011 18:13:37

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Статус Sorting result и Sending data

Смотрите на EXPLAIN от запроса, а не на профиль. Иначе угадывать
можно очень долго wink

Сходу — D ставить в начале индекса бессмысленно, т.к. Вы исполь-
зуете диапазонный поиск по этому полю.

Sending data увеличилась, т.к. у Вас нет сортированных данных в кэше
в памяти — приходится подгружать wink

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson