[英]How to improve the SQL query?
我有如下查询(打算得到相同的结果),并且我想优化查询,以减少数据库服务器的CPU使用率。
我在下面尝试了两个不同的查询,似乎两个查询的性能相似。 (使用SHOW PROFILES
检查)
任何意见或建议,将不胜感激。
先感谢您。
信息:
Table A has 7333 rows
Table B has 5656 rows
Table C has 1108 rows
Table D has ~150 rows (keep changing)
Table E has 18576 rows
查询1:
SELECT A.ct, A.res, A.ctype, A.cweight, B.lat, B.lng, C.first, C.second, C.third
FROM A
JOIN B
ON A.ct= B.dct
JOIN C
ON A.ct = C.dct
LEFT JOIN
(
SELECT D.dct
FROM D
JOIN E
ON D.oct = E.oct
WHERE E.oct is null
OR (E.oct is not null
AND E.wua <> '')
) as K
ON A.ct = K.dct
WHERE A.type = 1 AND B.lng != '' AND B.lat != '' AND A.black != 1 AND B.modi_time > (NOW() + INTERVAL 8 HOUR)
ORDER BY A.ct DESC
QUERY2:
SELECT A.ct, A.res, A.ctype, A.cweight, B.lat, B.lng, C.first, C.second, C.third
FROM A
JOIN B
ON A.ct = B.ct
JOIN C
ON A.ct = C.dct
WHERE A.type = 1 AND B.lng != '' AND B.lat != '' AND A.black != 1 AND B.modi_time > (NOW() + INTERVAL 8 HOUR)
AND A.ct NOT IN (
SELECT D.dct
FROM D
JOIN E
ON D.oct = E.oct
WHERE E.wua <> ''
)
ORDER BY A.ct DESC;
根据我的经验,尝试为该值声明一个变量(NOW()+ INTERVAL 8 HOUR),然后在查询中使用该变量,例如:
AND B.modi_time>@variable
这可能会提高查询性能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.