【发布时间】:2012-11-09 18:16:51
【问题描述】:
应用了所有过滤器的我的 SQL 查询返回 100 万(一百万)条记录。要获得所有记录需要 76.28 秒 .. 这是不可接受的。如何优化我的 SQL 查询,这应该花费更少的时间。 我正在使用的查询是:
SELECT cDistName , cTlkName, cGpName, cVlgName ,
cMmbName , dSrvyOn
FROM sspk.villages
LEFT JOIN gps ON nVlgGpID = nGpID
LEFT JOIN TALUKS ON nGpTlkID = nTlkID
left JOIN dists ON nTlkDistID = nDistID
LEFT JOIN HHINFO ON nHLstGpID = nGpID
LEFT JOIN MEMBERS ON nHLstID = nMmbHhiID
LEFT JOIN BNFTSTTS ON nMmbID = nBStsMmbID
LEFT JOIN STATUS ON nBStsSttsID = nSttsID
LEFT JOIN SCHEMES ON nBStsSchID = nSchID
WHERE (
(nMmbGndrID = 1 and nMmbAge between 18 and 60)
or (nMmbGndrID = 2 and nMmbAge between 18 and 55)
)
AND cSttsDesc like 'No, Eligible'
AND DATE_FORMAT(dSrvyOn , '%m-%Y') < DATE_FORMAT('2012-08-01' , '%m-%Y' )
GROUP BY cDistName , cTlkName, cGpName, cVlgName ,
DATE_FORMAT(dSrvyOn , '%m-%Y')
我已经在论坛和外部搜索并使用了一些给出的提示,但几乎没有任何区别。我在上面的查询中使用的连接是左连接全部在 Primary Key 和 Foreign key 上。任何人都可以建议我如何修改此 sql 以减少执行时间 ....
【问题讨论】:
-
MySQLs
explain功能是你的帮手... -
请记住,关系数据库的问题之一是连接的扩展性非常差。
-
表结构?,可能你想改一下:stackoverflow.com/questions/792875/…
-
根据您使用数据的方式,您可能能够使用 memcached 或其他一些对象缓存机制来缓存结果。
-
请发布
explain和explain extended的输出。
标签: mysql