今天系統爆出一個慢SQL語句,經過分析確定查詢時間過長的原因主要是數據量大三張表內聯耗時較長;經過重新設計將不必要的內聯邏輯排除,成功的將查詢時間降低一個數量級。
原始SQL:
select b.*, c.type_name from msop_t_set_storedata a INNER JOIN msop_t_store_data b on a.data_id = b.Id INNER JOIN msop_t_store_data_type c on b.data_type_id = c.Id where a.cust_num = '6009256673';
修改後:
select b.*, c.type_name from (select data_id ,cust_num from msop_t_set_storedata where cust_num = '6009256673') a INNER JOIN msop_t_store_data b on a.data_id = b.Id INNER JOIN msop_t_store_data_type c on b.data_type_id = c.Id;
執行效率對比:
mysql> set profiling=1;
Query OK, 0 rows affected
mysql> select b.*, c.type_name from msop_t_set_storedata a INNER JOIN msop_t_store_data b on a.data_id = b.Id INNER JOIN msop_t_store_data_type c on b.data_type_id = c.Id where a.cust_num = '6009256673';
+----+----------------+--------------+----------------------------------------------------------+------------+----------+--------------+---------------------+----------+--------+--------------+----------------+-----------+
| Id | data_name | data_type_id | req_url | force_show | sort_num | data_code | update_time | operator | is_new | supplierType | plugin_type_id | type_name |
+----+----------------+--------------+----------------------------------------------------------+------------+----------+--------------+---------------------+----------+--------+--------------+----------------+-----------+
| 13 | 今日瀏覽量111 | 11 | http://msoppre.cnsuning.com/msop/custview/data/index.htm | 1 | 0 | browseNum | 2016-12-15 16:09:46 | 14050313 | 1 | C,H,S | 8 | 今日數據 |
| 14 | 今日總訪客數 | 11 | http://msoppre.cnsuning.com/msop/custview/data/index.htm | 1 | 1 | visitorNum | 2016-06-07 19:30:36 | 14050313 | 0 | C,H,S | 8 | 今日數據 |
| 15 | 今日成交總金額 | 11 | http://msoppre.cnsuning.com/msop/custview/data/index.htm | 1 | 4 | dealAmount | 2016-10-28 11:04:08 | 14050313 | 0 | C,H,S | 8 | 今日數據 |
| 17 | 今日訂單數 | 11 | http://msoppre.cnsuning.com/msop/custview/data/index.htm | 1 | 7 | dealOrderNum | 2016-12-15 16:10:26 | 14050313 | 0 | C,H,S | 8 | 今日數據 |
+----+----------------+--------------+----------------------------------------------------------+------------+----------+--------------+---------------------+----------+--------+--------------+----------------+-----------+
4 rows in set
mysql> select b.*, c.type_name from (select data_id ,cust_num from msop_t_set_storedata where cust_num = '6009256673') a INNER JOIN msop_t_store_data b on a.data_id = b.Id INNER JOIN msop_t_store_data_type c on b.data_type_id = c.Id;
+----+----------------+--------------+----------------------------------------------------------+------------+----------+--------------+---------------------+----------+--------+--------------+----------------+-----------+
| Id | data_name | data_type_id | req_url | force_show | sort_num | data_code | update_time | operator | is_new | supplierType | plugin_type_id | type_name |
+----+----------------+--------------+----------------------------------------------------------+------------+----------+--------------+---------------------+----------+--------+--------------+----------------+-----------+
| 13 | 今日瀏覽量111 | 11 | http://msoppre.cnsuning.com/msop/custview/data/index.htm | 1 | 0 | browseNum | 2016-12-15 16:09:46 | 14050313 | 1 | C,H,S | 8 | 今日數據 |
| 14 | 今日總訪客數 | 11 | http://msoppre.cnsuning.com/msop/custview/data/index.htm | 1 | 1 | visitorNum | 2016-06-07 19:30:36 | 14050313 | 0 | C,H,S | 8 | 今日數據 |
| 15 | 今日成交總金額 | 11 | http://msoppre.cnsuning.com/msop/custview/data/index.htm | 1 | 4 | dealAmount | 2016-10-28 11:04:08 | 14050313 | 0 | C,H,S | 8 | 今日數據 |
| 17 | 今日訂單數 | 11 | http://msoppre.cnsuning.com/msop/custview/data/index.htm | 1 | 7 | dealOrderNum | 2016-12-15 16:10:26 | 14050313 | 0 | C,H,S | 8 | 今日數據 |
+----+----------------+--------------+----------------------------------------------------------+------------+----------+--------------+---------------------+----------+--------+--------------+----------------+-----------+
4 rows in set
mysql> show profiles;
+----------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Query_ID | Duration | Query |
+----------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 1 | 0.001387 | select b.*, c.type_name from msop_t_set_storedata a INNER JOIN msop_t_store_data b on a.data_id = b.Id INNER JOIN msop_t_store_data_type c on b.data_type_id = c.Id where a.cust_num = '6009256673' |
| 2 | 0.00091275 | select b.*, c.type_name from (select data_id ,cust_num from msop_t_set_storedata where cust_num = '6009256673') a INNER JOIN msop_t_store_data b on a.data_id = b.Id INNER JOIN msop_t_store_data_type c on b.data_type_id = c.Id |
+----------+------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
2 rows in set
mysql>
優化前執行時間:0.00138700
優化後執行時間:0.00091275
優化時間:0.00047425
效率提升:34.19250180245133%