inner join MySQL Profiles 三表內聯查詢效率優化

  今天系統爆出一個慢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%



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章