Помогите оптимизировать запрос для мускула
От: Андрeй Россия http://www.andrey.polyakov.name
Дата: 16.04.08 10:46
Оценка:
Здраствуйте, я написал запрос после которого моя 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` — это я добавил чтобы по два раза не выводились
Re: Помогите оптимизировать запрос для мускула
От: Аноним  
Дата: 16.04.08 18:12
Оценка:
Здравствуйте, Андрeй, Вы писали:

А>Мой запрос:

А>----------------------------------------------------------
А>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;
А>----------------------------------------------------------

Не скажу как в мускуле, но TSQL нужно вместо where написать on или вместо inner join поставить запятую
Re: Помогите оптимизировать запрос для мускула
От: Роман Дубров Украина Я@Blogspot
Дата: 17.04.08 11:24
Оценка:
Андрeй пишет:

> Требуется выбрать все записи в которых 5 одинаковых полей те a1=an b1=bn

> c1=cn итд.

если я все правильно понял, надо заджойниться по этим 5 полям

> ----------------------------------------------------------

> SELECT DISTINCT `upvd12`.`a` , `upvd12`.`b` , `upvd12`.`o` ,
> `upvd12`.`p` , `upvd12`.`r`
> FROM `upvd12`
> INNER JOIN `upvd12` AS `www`
*ON* `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;
> ----------------------------------------------------------

--
np: [foobar2000] not started
Posted via RSDN NNTP Server 2.1 beta
http://www.linkedin.com/in/romandubrov .::. http://roman-dubrov.blogspot.com/ .::. http://www.flickr.com/photos/romandubrov/
Re[2]: Помогите оптимизировать запрос для мускула
От: Андрeй Россия http://www.andrey.polyakov.name
Дата: 18.04.08 05:54
Оценка:
Повысил производительность созданием индексов, но не шибко помогло.
Теперь, я дополнил запрос и та же картина

При выборке из одной табдицы тормозит, но не сильно, а из 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

?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.