国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MySQL5.6新特性之Multi-Range Read

2024-07-24 12:34:47
字體:
來源:轉載
供稿:網友

        MySQL5.6新特性之Multi-Range Read:

  一 介紹
      MySQL 5.6版本提供了很多性能優化的特性,其中之一就是 Multi-Range Read 多范圍讀(MRR) , 它的作用針對基于輔助/第二索引的查詢,減少隨機IO,并且將隨機IO轉化為順序IO,提高查詢效率。
  二 原理
   在沒有MRR之前,或者沒有開啟MRR特性時,MySQL 針對基于輔助索引的查詢策略是這樣的:
  select non_key_column from tb wherekey_column=x;
  MySQL 執行查詢的偽代碼
  第一步 先根據where條件中的輔助索引獲取輔助索引與主鍵的集合,結果集為rest。
        select key_column, pk_column from tb where key_column=x order by key_column
  第二步 通過第一步獲取的主鍵來獲取對應的值。
        for each pk_column value in rest do:
         select non_key_column from tb where pk_column=val
 
  由于MySQL存儲數據的方式: 輔助索引的存儲順序并非與主鍵的順序一致,從圖中可以看出,根據輔助索引獲取的主鍵來訪問表中的數據會導致隨機的IO . 不同主鍵不在同一個page 里面時必然導致多次IO 和隨機讀。
 
  在使用MRR優化特性的情況下,MySQL 針對基于輔助索引的查詢策略是這樣的:
  第一步 先根據where條件中的輔助索引獲取輔助索引與主鍵的集合,結果集為rest
        select key_column, pk_column from tb where key_column = x order by key_column
  第二步 將結果集rest放在buffer里面(read_rnd_buffer_size 大小直到buffer滿了),然后對結果集rest按照pk_column排序,得到結果集是rest_sort
  第三步 利用已經排序過的結果集,訪問表中的數據,此時是順序IO.
         select non_key_column fromtb where pk_column in ( rest_sort )
 
  從圖示MRR原理,MySQL 將根據輔助索引獲取的結果集根據主鍵進行排序,將亂序化為有序,可以用主鍵順序訪問基表,將隨機讀轉化為順序讀,多頁數據記錄可一次性讀入或根據此次的主鍵范圍分次讀入,以減少IO操作,提高查詢效率。
 
  三 相關參數
      我們可以通過參數 optimizer_switch 的標記來控制是否使用MRR,當設置mrr=on時,表示啟用MRR優化。mrr_cost_based 表示是否通過 cost base的方式來啟用MRR.如果選擇mrr=on,mrr_cost_based=off,則表示總是開啟MRR優化。
      參數read_rnd_buffer_size 用來控制鍵值緩沖區的大小。
      
  四  案例介紹
  當開啟MRR時
 
  MySQL > explain select * from tbl where tbl.key1 between 1000 and 2000;
  +----+-------------+-------+-------+---------------+------+---------+------+------+-------------------------------------------+
  | id | select_type | table | type  | possible_keys | key  | key_len | ref  | rows | Extra                                     |
  +----+-------------+-------+-------+---------------+------+---------+------+------+-------------------------------------------+
  | 1  | SIMPLE      | tbl   | range | key1          | key1 | 5       | NULL | 960  | Using index condition; Using MRR          |
  +----+-------------+-------+-------+---------------+------+---------+------+------+-------------------------------------------+
  1 row in set (0.03 sec)
  五 MRR的使用限
     MRR 適用于以下兩種情況。
     1 range access
     2 ref and eq_ref access, when they are using Batched Key Access.

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 海宁市| 临漳县| 桂林市| 黔西| 涞水县| 榆树市| 塔城市| 武冈市| 临武县| 聊城市| 轮台县| 正镶白旗| 涞水县| 白城市| 抚宁县| 孝义市| 会昌县| 获嘉县| 东明县| 平定县| 唐海县| 岚皋县| 平乐县| 西盟| 调兵山市| 仁布县| 仪征市| 株洲县| 洪江市| 大埔区| 游戏| 江都市| 和龙市| 云和县| 东明县| 西宁市| 内黄县| 内黄县| 县级市| 纳雍县| 平乡县|