日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql使用bka_MySQL Batched Key Access (BKA)原理和设置使用方法举例

發布時間:2024/10/12 数据库 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql使用bka_MySQL Batched Key Access (BKA)原理和设置使用方法举例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

MySQL 5.6版本開始增加了提高表join性能的算法:Batched Key Access (BKA)的新特性。

BKA算法原理:將外層循環的行/結果集存入join buffer,內存循環的每一行數據與整個buffer中的記錄做比較,

可以減少內層循環的掃描次數.

對于多表join語句,當MySQL使用索引訪問第二個join表的時候,使用一個join buffer來收集第一個操作對象生成

的相關列值。BKA構建好key后,批量傳給引擎層做索引查找。key是通過MRR接口提交給引擎的,

這樣,MRR使得查詢更有效率。

如果外部表掃描的是主鍵,那么表中的記錄訪問都是比較有序的,但是如果聯接的列是非主鍵索引,那么對于表中記錄

的訪問可能就是非常離散的。因此對于非主鍵索引的聯接,Batched Key Access Join算法

將能極大提高SQL的執行效率。BKA算法支持內連接,外連接和半連接操作,包括嵌套外連接。

Batched Key Access Join算法的工作步驟如下:

1) 將外部表中相關的列放入Join Buffer中。

2) 批量的將Key(索引鍵值)發送到Multi-Range Read(MRR)接口。

3) Multi-Range Read(MRR)通過收到的Key,根據其對應的ROWID進行排序,然后再進行數據的讀取操作。

4) 返回結果集給客戶端。

對于多表join語句,當MySQL使用索引訪問第二個join表的時候,使用一個join buffer來收集第一個操作對象生成的相關

列值。BKA構建好key后,批量傳給引擎層做索引查找。key是通過MRR接口提交給引擎?的(mrr目的是較為順序).

這樣,MRR使得查詢更有效率。

大致的過程如下:

1 BKA使用join buffer保存由join的第一個操作產生的符合條件的數據

2 然后BKA算法構建key來訪問被連接的表,并批量使用MRR接口提交keys到數據庫存儲引擎去查找查找。

3 提交keys之后,MRR使用最佳的方式來獲取行并反饋給BKA

BNL(Block Nested Loop)和BKA(MySQL Batched Key Access)都是批量的提交一部分行給被join的表,從而減少訪問的

次數,那么它們有什么區別呢?

第一 BNL比BKA出現的早,BKA直到5.6才出現,而BNL至少在5.1里面就存在。

第二 BNL主要用于當被join的表上無索引

第三 BKA主要是指在被join表上有索引可以利用,那么就在行提交給被join的表之前,對這些行按照索引字段進行排序,

因此減少了隨機IO,排序這才是兩者最大的區別,但是如果被join的表沒用索引呢?

那就使用BNL了。

以下設置啟用BKA:

要使用BKA,必須調整系統參數optimizer_switch的值,官方推薦關閉mrr_cost_based,應將其設置為off。

mysql> SET global optimizer_switch=’mrr=on,mrr_cost_based=off,batched_key_access=on’;

備注:

BKA主要適用于join的表上有索引可利用,無索引只能使用BNL。

多表join語句 ,被join的表/非驅動表必須有索引可用。

在EXPLAIN輸出中,當Extra值包含Using join buffer(Batched Key Access),表示使用BKA。

+——————————————————–+

| Extra? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

+——————————————————–+

| NULL? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?|

| Using where; Using join buffer (Batched Key Access)|

+———————————————————+

使用hint,強制走BKA的方法:

例如:

總結

以上是生活随笔為你收集整理的mysql使用bka_MySQL Batched Key Access (BKA)原理和设置使用方法举例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。