你好,我正在构建一个Java程序,需要管理一些项目。为了做到这一点,我需要过滤这些项目。我通过构建SQL查询并执行它来过滤项目。我需要以下查询首先进行排序
(LEFT JOIN (SELECT * FROM grupe ORDER BY grupe.pavadinimas DESC)grupe ON
)
然后才添加所有其他数据并执行WHERE子句。
SELECT *
FROM (
(
SELECT preke.*
FROM preke_tiekejas
, preke
WHERE preke_tiekejas.tiek_id IN (18610,13604)
AND preke.pr_id=preke_tiekejas.pr_id
GROUP BY
preke_tiekejas.pr_id
) preke
, preke_kaina
, (
SELECT *
FROM preke_info
WHERE preke_info.pavadinimas LIKE '%kait%'
) preke_info
) LEFT JOIN (
SELECT *
FROM grupe
ORDER BY
grupe.pavadinimas DESC
)grupe ON grupe.pgs_id=preke.pgs_id
LEFT JOIN gamintojas ON gamintojas.gam_id=preke.gam_id
LEFT JOIN grupe_darb ON grupe_darb.pgs_id=grupe.pgs_id
WHERE preke_kaina.pr_id=preke.pr_id
AND preke_info.pr_id=preke.pr_id
AND grupe_darb.darb_id = 20
LIMIT 0, 500
如果我删除这两个子查询:
(SELECT * FROM preke_info WHERE preke_info.pavadinimas LIKE '%kait%')
(SELECT preke.* FROM preke_tiekejas, preke
WHERE preke_tiekejas.tiek_id IN (18610,13604)
AND preke.pr_id=preke_tiekejas.pr_id
GROUP BY preke_tiekejas.pr_id)
然后查询将按照我想要的方式工作。
附言:仅在查询结束时排序不是选项,因为有大量记录,这样会变得非常慢。
解释:
@Lieven:
查询结果不相同 - 不加限制应该有约90k行:
查询结果不相同 - 返回约50行:
grupe_darb
上缺少一个索引。 - Lieven KeersmaekersAND preke_info.pavadinimas LIKE '%kait%'
和( SELECT preke.* FROM preke_tiekejas INNER JOIN preke ON preke.pr_id=preke_tiekejas.pr_id WHERE preke_tiekejas.tiek_id IN (18610,13604) GROUP BY preke_tiekejas.pr_id )
),你的查询需要69秒才能执行,而我的只需要0.3秒。 - Minutis