您好,登錄后才能下訂單哦!
不知道大家之前對類似MySQL通過添加索引達(dá)到優(yōu)化SQL的具體操作的文章有無了解,今天我在這里給大家再簡單的講講。感興趣的話就一起來看看正文部分吧,相信看完MySQL通過添加索引達(dá)到優(yōu)化SQL的具體操作你一定會(huì)有所收獲的。
在慢查詢?nèi)罩局杏幸粭l慢SQL,執(zhí)行時(shí)間約為3秒
mysql> SELECT -> t.total_meeting_num, -> r.voip_user_num -> FROM -> ( -> SELECT -> count(*) total_meeting_num -> FROM -> Conference -> WHERE -> isStart = 1 -> AND startTime >= ADDDATE(now(), - 1) -> AND billingcode != 651158 -> AND billingcode != 651204 -> ) t, -> ( -> SELECT -> count(userID) voip_user_num -> FROM -> ( -> SELECT -> conferenceID, -> userID, -> isOnline, -> createdTime -> FROM -> ( -> SELECT -> * -> FROM -> ConferenceUser -> WHERE -> createdTime >= ADDDATE(now(), - 1) -> AND userID > 1000 -> ORDER BY -> userID, -> createdTime DESC -> ) t -> GROUP BY -> userID -> ) t, -> ( -> SELECT -> * -> FROM -> Conference -> WHERE -> isStart = 1 -> AND startTime >= ADDDATE(now(), - 1) -> AND conferenceName NOT LIKE 'evmonitor%' -> ) r -> WHERE -> t.isOnline = 1 -> AND t.conferenceID = r.conferenceID -> ) r; +-------------------+---------------+ | total_meeting_num | voip_user_num | +-------------------+---------------+ | 29 | 48 | +-------------------+---------------+ 1 row in set (3.01 sec)
查看執(zhí)行計(jì)劃
mysql> explain SELECT -> t.total_meeting_num, -> r.voip_user_num -> FROM -> ( -> SELECT -> count(*) total_meeting_num -> FROM -> Conference -> WHERE -> isStart = 1 -> AND startTime >= ADDDATE(now(), - 1) -> AND billingcode != 651158 -> AND billingcode != 651204 -> ) t, -> ( -> SELECT -> count(userID) voip_user_num -> FROM -> ( -> SELECT -> conferenceID, -> userID, -> isOnline, -> createdTime -> FROM -> ( -> SELECT -> * -> FROM -> ConferenceUser -> WHERE -> createdTime >= ADDDATE(now(), - 1) -> AND userID > 1000 -> ORDER BY -> userID, -> createdTime DESC -> ) t -> GROUP BY -> userID -> ) t, -> ( -> SELECT -> * -> FROM -> Conference -> WHERE -> isStart = 1 -> AND startTime >= ADDDATE(now(), - 1) -> AND conferenceName NOT LIKE 'evmonitor%' -> ) r -> WHERE -> t.isOnline = 1 -> AND t.conferenceID = r.conferenceID -> ) r; +----+-------------+----------------+--------+----------------+----------------+---------+------+---------+---------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------------+--------+----------------+----------------+---------+------+---------+---------------------------------+ | 1 | PRIMARY | <derived2> | system | NULL | NULL | NULL | NULL | 1 | | | 1 | PRIMARY | <derived3> | system | NULL | NULL | NULL | NULL | 1 | | | 3 | DERIVED | <derived6> | ALL | NULL | NULL | NULL | NULL | 18 | | | 3 | DERIVED | <derived4> | ALL | NULL | NULL | NULL | NULL | 12667 | Using where; Using join buffer | | 6 | DERIVED | Conference | range | ind_start_time | ind_start_time | 5 | NULL | 889 | Using where | | 4 | DERIVED | <derived5> | ALL | NULL | NULL | NULL | NULL | 18918 | Using temporary; Using filesort | | 5 | DERIVED | ConferenceUser | ALL | NULL | NULL | NULL | NULL | 6439656 | Using where; Using filesort | | 2 | DERIVED | Conference | range | ind_start_time | ind_start_time | 5 | NULL | 889 | Using where | +----+-------------+----------------+--------+----------------+----------------+---------+------+---------+---------------------------------+ 8 rows in set (3.04 sec)
查看索引
mysql> show index from ConferenceUser; +----------------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +----------------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | ConferenceUser | 0 | PRIMARY | 1 | recordID | A | 6439758 | NULL | NULL | | BTREE | | | | ConferenceUser | 0 | PRIMARY | 2 | conferenceID | A | 6439758 | NULL | NULL | | BTREE | | | | ConferenceUser | 1 | ind_conference_userID | 1 | conferenceID | A | 804969 | NULL | NULL | | BTREE | | | | ConferenceUser | 1 | ind_conference_userID | 2 | userID | A | 3219879 | NULL | NULL | | BTREE | | | +----------------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 4 rows in set (0.00 sec)
在表的列上添加索引
mysql> alter table ConferenceUser add index index_createdtime(createdTime); Query OK, 6439784 rows affected (38.46 sec) Records: 6439784 Duplicates: 0 Warnings: 0 查看索引 mysql> show index from ConferenceUser; +----------------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | +----------------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ | ConferenceUser | 0 | PRIMARY | 1 | recordID | A | NULL | NULL | NULL | | BTREE | | | | ConferenceUser | 0 | PRIMARY | 2 | conferenceID | A | 6439794 | NULL | NULL | | BTREE | | | | ConferenceUser | 1 | ind_conference_userID | 1 | conferenceID | A | 715532 | NULL | NULL | | BTREE | | | | ConferenceUser | 1 | ind_conference_userID | 2 | userID | A | 3219897 | NULL | NULL | | BTREE | | | | ConferenceUser | 1 | index_createdtime | 1 | createdTime | A | 6439794 | NULL | NULL | | BTREE | | | +----------------+------------+-----------------------+--------------+--------------+-----------+-------------+----------+--------+------+------------+---------+---------------+ 5 rows in set (0.00 sec)
再次執(zhí)行時(shí)間縮短為0.17秒
mysql> SELECT -> t.total_meeting_num, -> r.voip_user_num -> FROM -> ( -> SELECT -> count(*) total_meeting_num -> FROM -> Conference -> WHERE -> isStart = 1 -> AND startTime >= ADDDATE(now(), - 1) -> AND billingcode != 651158 -> AND billingcode != 651204 -> ) t, -> ( -> SELECT -> count(userID) voip_user_num -> FROM -> ( -> SELECT -> conferenceID, -> userID, -> isOnline, -> createdTime -> FROM -> ( -> SELECT -> * -> FROM -> ConferenceUser -> WHERE -> createdTime >= ADDDATE(now(), - 1) -> AND userID > 1000 -> ORDER BY -> userID, -> createdTime DESC -> ) t -> GROUP BY -> userID -> ) t, -> ( -> SELECT -> * -> FROM -> Conference -> WHERE -> isStart = 1 -> AND startTime >= ADDDATE(now(), - 1) -> AND conferenceName NOT LIKE 'evmonitor%' -> ) r -> WHERE -> t.isOnline = 1 -> AND t.conferenceID = r.conferenceID -> ) r; +-------------------+---------------+ | total_meeting_num | voip_user_num | +-------------------+---------------+ | 29 | 52 | +-------------------+---------------+ 1 row in set (0.17 sec)
查看執(zhí)行計(jì)劃
mysql> explain SELECT -> t.total_meeting_num, -> r.voip_user_num -> FROM -> ( -> SELECT -> count(*) total_meeting_num -> FROM -> Conference -> WHERE -> isStart = 1 -> AND startTime >= ADDDATE(now(), - 1) -> AND billingcode != 651158 -> AND billingcode != 651204 -> ) t, -> ( -> SELECT -> count(userID) voip_user_num -> FROM -> ( -> SELECT -> conferenceID, -> userID, -> isOnline, -> createdTime -> FROM -> ( -> SELECT -> * -> FROM -> ConferenceUser -> WHERE -> createdTime >= ADDDATE(now(), - 1) -> AND userID > 1000 -> ORDER BY -> userID, -> createdTime DESC -> ) t -> GROUP BY -> userID -> ) t, -> ( -> SELECT -> * -> FROM -> Conference -> WHERE -> isStart = 1 -> AND startTime >= ADDDATE(now(), - 1) -> AND conferenceName NOT LIKE 'evmonitor%' -> ) r -> WHERE -> t.isOnline = 1 -> AND t.conferenceID = r.conferenceID -> ) r; +----+-------------+----------------+--------+-------------------+-------------------+---------+------+-------+---------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+----------------+--------+-------------------+-------------------+---------+------+-------+---------------------------------+ | 1 | PRIMARY | <derived2> | system | NULL | NULL | NULL | NULL | 1 | | | 1 | PRIMARY | <derived3> | system | NULL | NULL | NULL | NULL | 1 | | | 3 | DERIVED | <derived6> | ALL | NULL | NULL | NULL | NULL | 20 | | | 3 | DERIVED | <derived4> | ALL | NULL | NULL | NULL | NULL | 12682 | Using where; Using join buffer | | 6 | DERIVED | Conference | range | ind_start_time | ind_start_time | 5 | NULL | 879 | Using where | | 4 | DERIVED | <derived5> | ALL | NULL | NULL | NULL | NULL | 18951 | Using temporary; Using filesort | | 5 | DERIVED | ConferenceUser | range | index_createdtime | index_createdtime | 4 | NULL | 31455 | Using where; Using filesort | | 2 | DERIVED | Conference | range | ind_start_time | ind_start_time | 5 | NULL | 879 | Using where | +----+-------------+----------------+--------+-------------------+-------------------+---------+------+-------+---------------------------------+ 8 rows in set (0.18 sec)
看完MySQL通過添加索引達(dá)到優(yōu)化SQL的具體操作這篇文章,大家覺得怎么樣?如果想要了解更多相關(guān),可以繼續(xù)關(guān)注我們的行業(yè)資訊板塊。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。