php – 为什么我的MySQL连接速度慢?
发布时间:2020-12-13 17:26:49 所属栏目:PHP教程 来源:网络整理
导读:我有一个连接表的查询.这是select语句: SELECT *,A.id AS id,A.username AS username,G.desc AS customer_desc,H.id AS counter,SUM( F.amount_paid ) FROM tblcheckin AS ALEFT OUTER JOIN tblrate AS B ON B.id = A.rate_idLEFT OUTER JOIN tblrefaccom_t
我有一个连接表的查询.这是select语句:
SELECT *,A.id AS id,A.username AS username,G.desc AS customer_desc,H.id AS counter,SUM( F.amount_paid ) FROM tblcheckin AS A LEFT OUTER JOIN tblrate AS B ON B.id = A.rate_id LEFT OUTER JOIN tblrefaccom_type AS C ON C.id = A.id LEFT OUTER JOIN tblcust_bill AS D ON D.check_in_id = A.id LEFT OUTER JOIN tblroom AS E ON E.room_no = A.room_id LEFT OUTER JOIN tblpayment AS F ON F.check_in_id = A.id LEFT OUTER JOIN tblrefcust_type AS G ON G.id = A.customer_desc LEFT OUTER JOIN tblindex AS H ON A.id = H.check_in_id WHERE A.check_out = "0000-00-00 00:00:00" GROUP BY F.check_in_id ORDER BY check_out,check_in 结果:显示0到11行(总共12行,查询占用7.4061秒) 这就是Explain SQL 这是我到目前为止所做的: 我在这做错了什么?我感谢每一个反馈.谢谢. UPDATE.问题解决了.我从tblpayment,tblcust_bill和tblindex向check_in_id列添加了索引.这是新的Explain SQL: 解决方法
看看你的Explain,我可以看到几个连接需要全表扫描.您可能没有A.check_out,D.check_in_id,F.check_in_id(这是基于相对行数的杀手)和H.check_in_id的索引.这意味着必须扫描整个Darn表A,D,F和H才能找到相关的行.
索引那4行,查询次数应该会猛涨. 话虽如此,我很惊讶这已经不是很快,甚至没有优化.我在每个表中都看到了几万行 – 除非这些行非常庞大(顺便说一下糟糕的做法 – 将文本/ blob和大列分解成单独的表),你应该能够得到这些结果不到7秒.更像是我期望的70毫秒.我怀疑你必须调整你的mysql服务器设置 – 使用更多ram,增加缓冲区大小等.但这些索引应该有很大帮助. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |