Страница 1 из 1
Оптимизация select count где select count >X
Добавлено: 18 мар 2006, 10:58
Wontar
Привет всем.
Сижу мучаюсь. Есть запрос типа:
Код: Выделить всё
select * from orders X
where (select count(id) from packets Z where X.ID = Z.Ordercode) > X
Этот запрос при налияии в таблице 240к записей выполняется вечно.
Что можете посоветовать сделать чтобы было быстрее?
Спасибо,
Олег.
Re: Оптимизация select count где select count >X
Добавлено: 18 мар 2006, 13:04
Merlin
Wontar писал(а):
Сижу мучаюсь.
Нууу... эт, канэшна, дело вкуса. Можно помучитцо, а можно какую-нить книжку вумную почитать про SQL. Граббера того же.
Wontar писал(а):
Есть запрос типа:
Код: Выделить всё
select * from orders X
where (select count(id) from packets Z where X.ID = Z.Ordercode) > X
Звёздочка - это принципиально? Или таки достаточно некоторого вменяемого набора полей? Тогда что-нить вроде:
Код: Выделить всё
Select X.ID, X.Col1, X.Col2, X.Col3, Count(*)
From Orders X
Join Packets Z
On Z.OrderCode=X.ID
Group By X.ID, X.Col1, X.Col2, X.Col3
Having Count(*)>:X
Wontar писал(а):
Этот запрос при налияии в таблице 240к записей выполняется вечно.
Ужос.
Добавлено: 18 мар 2006, 22:31
Wontar
Можно помучитцо, а можно какую-нить книжку вумную почитать про SQL. Граббера того же.
Как раз его и читаю
Вот совпадение.
Спасибки.
Добавлено: 20 мар 2006, 09:52
Wontar
Тогда что-нить вроде:
Код: Выделить всё
Select X.ID, X.Col1, X.Col2, X.Col3, Count(*)
From Orders X
Join Packets Z
On Z.OrderCode=X.ID
Group By X.ID, X.Col1, X.Col2, X.Col3
Having Count(*)>:X
Если можно, объясните, как выполняется этот запрос и что нужно делать если нужно отфильтровать Packets по CreationDateTime и узнать какие заказы не содержат пакетов созданных в период времени. (т.е. count(*) = 0)
Сенкс,
Олег.