|
|
su.dbms.sql- SU.DBMS.SQL ------------------------------------------------------------------ From : Ilya Zvyagin 2:5020/400 28 Mar 2001 18:36:28 To : All Subject : Re: mysql - запрос очень долго выполняется -------------------------------------------------------------------------------- Mita Mikheev wrote in message <985714475@p113.f194.n5020.z2.ftn>... >В таблице - от 20 до 4000+ строк >Есть запрос типа SELECT DISTINCT t0.fid, t0.wcnt FROM w_4c t0, w_90 t1 WHERE t0.parent IN (51897, .. ,51900) AND t1.parent IN (1,52551) AND t0.fid = t1.fid AND t0.wcnt-t1.wcnt > -10 == t0.wcnt > t1.wcnt - 10 GROUP BY t0.fid ORDER BY t0.wcnt Где агрегирующие функции ? Зачем GROUP BY ? Вообще бредовый IMHO запрос, даже без GROUP BY. Я так понимаю, что надо вывести все записи из t0, для которых в t1 есть записи, отличающиеся по wcnt более чем на 10. Зачем же для этого делать декартово произведение а потом "выжимать" из него DISTINCT-ом строки t0 ? select t0.fid, t0.wcnt from t0 where exists ( select * from t1 where t1.fid = t0.fid and t0.wcnt > t1.wcnt - 10 ) Hе проще ли ? >Этот запрос выполняется довольно долго. Существует возможность подобных >запросов по 3 таблицам и более. >Можно ли сделать более оптимальный запрос? Лучше добавить JOIN с parent-ами и указать условия выборки по ним. Кроме того, тут в запросе есть JOIN по выражению - это будет всегда медленно. JOIN-ить надо по индексам по простым полям. Hасчет условия t0.wcnt > t1.wcnt - 10 -лучще перепроектировать базу так, чтоб в явном виде где-то лежала эта разница в поле и по нему возможно построить индекс. --- ifmail v.2.15dev5 * Origin: FCT Saint-Petersburg (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /su.dbms.sql/13293af920f23.html, оценка из 5, голосов 10
|