mysql多表分析_mysql多表查询实例结果及分析-2017.12.14
今天幫運營導數據時發現sql執行速度非常慢,嗯,按照之前的編寫習慣,后來跟架構師一起分析討論,改進了下,現記錄分析如下
一、測試表、sql情況set?@bgDate?=?'20171213';
set?@edDate?=?'20171213';
/*編號①*/
SELECT?TA_ID,SUM(TB.amount),SUM(TB.fee)?FROM
(SELECT?ORDER_NO,TA_ID?FROM?Table_A??WHERE?TA_STATUS?=?100?AND?TA_CHANNEL_MERCH_NO?=?'201712130001'
AND?SETTLE_DATE?<=?@endDate?AND?SETTLE_DATE?>=?@begDate?)TA
LEFT?JOIN
(SELECT?ORDER_NO,AMOUNT,fee?FROM?Table_B)?TB
ON?TA.ORDER_NO?=?TB.ORDER_NO
GROUP?BY?TA.TA_ID;
/*編號②*/
SELECT?TA.`TA_ID`?AS?TA_ID?,?sum(TA.`AMOUNT`)??AS?sumAmount?,?sum(TB.`fee`)???AS?sumMerFee?FROM
`Table_A`?TA
LEFT?JOIN
`Table_B`?TB
ON?TA.`ORDER_NO`?=?TB.`ORDER_NO`
WHERE??TA.`SETTLE_DATE`?>=?@begDate?AND?TA.`SETTLE_DATE`?<=?@endDate
AND?TA.`TA_CHANNEL_MERCH_NO`='201712130001'
AND?TA.`TA_STATUS`=100
GROUP?BY?TA.`TA_ID`
/*以下為表的索引情況*/
Table_A?索引:TA_ID、order_no、settle_date
Table_B?索引:order_no
/*以下為表的數據量情況*/
Table_A:10W+條記錄
Table_B:10W+條記錄
二、測試結果
①90s才出結果;
②1.5s就出結果;
三、分析
1、navicat-解釋
編號①的TA進行了全表掃描;
2、自主分析
編號①sql
(1)雖然已減少了表數據量,但是由于新創了臨時表TA、TB,都無索引,在left join時速度較慢;
(2)最后group by時,TA.TA_ID也無索引,導致再一次降低速度;
編號②sql
(1)雖然TA、TB直接全表left join,但是連接的order_no已做索引,速度還是能保證的;
(2)where和group by中涉及部分字段已加索引。
總結
以上是生活随笔為你收集整理的mysql多表分析_mysql多表查询实例结果及分析-2017.12.14的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: dhcp MySQL 超时_mysql导
- 下一篇: navicat 8 mysql生成关系_