<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          MySQL SQL優(yōu)化 - 覆蓋索引(covering index)

          共 1958字,需瀏覽 4分鐘

           ·

          2021-12-27 10:05

          CREATE TABLE `user_group` (  `id` int(11) NOT NULL auto_increment,  `uid` int(11) NOT NULL,  `group_id` int(11) NOT NULL,  PRIMARY KEY  (`id`),  KEY `uid` (`uid`),  KEY `group_id` (`group_id`),) ENGINE=InnoDB AUTO_INCREMENT=750366 DEFAULT CHARSET=utf8 
          看AUTO_INCREMENT就知道數(shù)據(jù)并不多,75萬條。簡單的查詢:
          SELECT SQL_NO_CACHE uid FROM user_group WHERE group_id = 245; -- SQL_NO_CACHE 不使用緩存提示
          Explain的結(jié)果是:+----+-------------+------------+------+---------------+----------+---------+-------+------+-------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+------------+------+---------------+----------+---------+-------+------+-------+| 1 | SIMPLE | user_group | ref | group_id | group_id | 4 | const | 5544 | |+----+-------------+------------+------+---------------+----------+---------+-------+------+-------+
          看起來已經(jīng)用上索引了,數(shù)據(jù)分布上,group_id相同的比較多,uid散列的比較均勻,加索引的效果一般,試著加了一個多列索引:ALTER TABLE user_group ADD INDEX group_id_uid (group_id, uid);
          這句SQL查詢的性能發(fā)生了巨大的提升,居然已經(jīng)可以跑到0.00s左右了。經(jīng)過優(yōu)化的SQL再結(jié)合真實的業(yè)務(wù)需求,也從之前2.2s下降到0.05s。Explain一次+----+-------------+------------+------+-----------------------+--------------+---------+-------+------+-------------+| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |+----+-------------+------------+------+-----------------------+--------------+---------+-------+------+-------------+| 1 | SIMPLE | user_group | ref | group_id,group_id_uid | group_id_uid | 4 | const | 5378 | Using index |+----+-------------+------------+------+-----------------------+--------------+---------+-------+------+-------------+
          這種叫覆蓋索引(covering index),MySQL只需要通過索引就可以返回查詢所需要的數(shù)據(jù),而不必在查到索引之后再去查詢數(shù)據(jù),所以相當(dāng)快!!但是同時也要求所查詢的字段必須被索引所覆蓋到,在Explain的時候,輸出的Extra信息中如果有“Using Index”,就表示這條查詢使用了覆蓋索引。



          瀏覽 23
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  天天色天天射天天干 | 欧美第8页 | 欧美性猛交XXXXX无码婷 日日嗨av一区二区三区免费 | www.婷婷五月天.com | 大香蕉大香蕉 |