繁体   English   中英

如何改善SQL查询?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM