Добрый день!
Помогите, пожалуйста, разобраться с логикой работы mysql
Имеется база данных размером 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)