Здраствуйте, я написал запрос после которого моя mysql под мастдаем зависает. Это связано с большим количеством записей или еще с чем-то(( с 5ю записями все ок!
Требуется выбрать все записи в которых 5 одинаковых полей те a1=an b1=bn c1=cn итд.
Подскажите как его оптимизировать?
Мой запрос:
----------------------------------------------------------
SELECT DISTINCT `upvd12`.`a` , `upvd12`.`b` , `upvd12`.`o` , `upvd12`.`p` , `upvd12`.`r`
FROM `upvd12`
INNER JOIN `upvd12` AS `www`
WHERE `upvd12`.`o` = `www`.`o`
AND `upvd12`.`p` = `www`.`p`
AND `upvd12`.`r` = `www`.`r`
AND `www`.`a` = `upvd12`.`a`
AND `upvd12`.`b` = `www`.`b`
AND `upvd12`.`id` != `www`.`id`
LIMIT 0 , 30;
----------------------------------------------------------
`upvd12`.`id` != `www`.`id` — это я добавил чтобы по два раза не выводились
Повысил производительность созданием индексов, но не шибко помогло.
Теперь, я дополнил запрос и та же картина
При выборке из одной табдицы тормозит, но не сильно, а из 2х виснет. В итоге у меня два запорса:
SELECT DISTINCT `upvd01`.`a` , `upvd01`.`d` , `upvd01`.`e` , `upvd01`.`f` , `upvd01`.`g`
FROM `upvd01`
WHERE `upvd01`.`a` = (
SELECT DISTINCT `upvd12`.`a`
FROM `upvd12` , `upvd12` AS `www`
WHERE `upvd12`.`o` = `www`.`o`
AND `upvd12`.`p` = `www`.`p`
AND `upvd12`.`r` = `www`.`r`
AND `www`.`a` = `upvd12`.`a`
AND `upvd12`.`b` = `www`.`b`
AND `upvd12`.`id` != `www`.`id`
LIMIT 3 , 1 )
LIMIT 0 , 30
Его недостаток, что он вибирает одну запись, а не N и выполняется тоже долго.
SELECT DISTINCT `upvd01`.`d` , `upvd01`.`e` , `upvd01`.`f` , `upvd01`.`g`
FROM `upvd12` , `upvd12` AS `www` , `upvd01`
WHERE `upvd12`.`o` = `www`.`o`
AND `upvd12`.`p` = `www`.`p`
AND `upvd12`.`r` = `www`.`r`
AND `www`.`a` = `upvd12`.`a`
AND `upvd12`.`b` = `www`.`b`
AND `upvd12`.`id` != `www`.`id`
LIMIT 0 , 30
Что вы думаете по поводу этих запроса? Каких улучшить? Первый неудобен, второй долгий
Re: Помогите оптимизировать запрос для мускула
От:
Аноним
Дата:
18.04.08 16:16
Оценка:
Здравствуйте, Андрeй, Вы писали:
А>Здраствуйте, я написал запрос после которого моя mysql под мастдаем зависает. Это связано с большим количеством записей или еще с чем-то(( с 5ю записями все ок! А>Требуется выбрать все записи в которых 5 одинаковых полей те a1=an b1=bn c1=cn итд. А>Подскажите как его оптимизировать?
А>Мой запрос: А>---------------------------------------------------------- А>SELECT DISTINCT `upvd12`.`a` , `upvd12`.`b` , `upvd12`.`o` , `upvd12`.`p` , `upvd12`.`r` А>FROM `upvd12` А>INNER JOIN `upvd12` AS `www` А>WHERE `upvd12`.`o` = `www`.`o` А>AND `upvd12`.`p` = `www`.`p` А>AND `upvd12`.`r` = `www`.`r` А>AND `www`.`a` = `upvd12`.`a` А>AND `upvd12`.`b` = `www`.`b` А>AND `upvd12`.`id` != `www`.`id` А>LIMIT 0 , 30; А>----------------------------------------------------------
А>`upvd12`.`id` != `www`.`id` — это я добавил чтобы по два раза не выводились
может так:
SELECT `upvd12`.`a` , `upvd12`.`b` , `upvd12`.`o` , `upvd12`.`p` , `upvd12`.`r`
FROM `upvd12`
GROUP BY `upvd12`.`a` , `upvd12`.`b` , `upvd12`.`o` , `upvd12`.`p` , `upvd12`.`r`
HAVING COUNT(*) > 1