婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > MySQL的查詢計劃中ken_len的值計算方法

MySQL的查詢計劃中ken_len的值計算方法

熱門標簽:沈陽智能外呼系統供應商 清遠申請400電話 桂林云電銷機器人收費 手機外呼系統違法嗎 如何選擇優質的外呼系統 地圖簡圖標注 谷歌地圖標注位置圖解 南通電銷外呼系統哪家強 東莞外呼企業管理系統

key_len的含義

在MySQL中,可以通過explain查看SQL語句所走的路徑,如下所示:

mysql> create table t(a int primary key, b int not null, c int not null, index(b));
 Query OK, 0 rows affected (0.01 sec)
 mysql> explain select b from t ;
 +----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
 | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra    |
 +----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
 | 1 | SIMPLE   | t   | index | NULL     | b  | 4    | NULL |  1 | Using index |
 +----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
 1 row in set (0.00 sec)

其中,key_len表示使用的索引長度,是以字節為單位。在上面的例子中,由于int型占用4個字節,而索引中只包含了1列,所以,key_len是4。

下面是聯合索引的情況:

mysql> alter table t add index ix(b, c);
Query OK, 0 rows affected (0.03 sec)
Records: 0 Duplicates: 0 Warnings: 0
mysql> explain select b, c from t ;
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra    |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE   | t   | index | NULL     | ix  | 8    | NULL |  1 | Using index |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

聯合索引ix包含了2列,并且都使用到了,所以,這里ken_len是8。

到這里,我們已經可以理解key_len的含義了,似乎已經沒有什么可講的了,但是,MySQL中key_len的計算還有很多需要注意的地方。

例如,我們將b這一列的NOT NULL約束去掉,然后ken_len就和我們預期不一樣了,如下所示:

mysql> alter table t modify b int;
Query OK, 0 rows affected (0.01 sec)
Records: 0 Duplicates: 0 Warnings: 0
 
mysql> explain select b from t;
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra    |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
| 1 | SIMPLE   | t   | index | NULL     | b  | 5    | NULL |  1 | Using index |
+----+-------------+-------+-------+---------------+------+---------+------+------+-------------+
1 row in set (0.00 sec)

MySQL中key_len計算規則

MySQL中,key_len的計算規則如下:

  • 如果列可以為空,則在數據類型占用字節的基礎上加1,如int型,不能為空key_len為4,可以為空key_len為5
  • 如果列是變長的,則在數據列所占字節的基數上再加2,如varbinary(10),不能為空,則key_len為10 + 2 ,可以為空則key_len為10+2+1
  • 如果是字符型,則還需要考慮字符集,如某列的定義是varchar(10),且是utf8,不能為空,則key_len為10 * 3 + 2,可以為空則key_len為10*3+2+1
  • 此外,decimal列的計算方法與上面一樣,如果可以為空,則在數據類型占用字節的基礎上加1,但是,decimal本身所占用字節數,計算就比較復雜。

根據官方文檔可以知道,decimal定義為decimal(M,D),其中,M是總的位數,D是小數點后保留的位數。小數點前與小數點后的數字分開存儲,且以9位數為1組,用4個字節保存,如果低于9位數,需要的字節數如下:

Leftover Digits Number of Bytes
-----------------------------
|0 |0 |
|1-2 |1 |
|3-4 |2 |
|5-6 |3 |
|7-9 |4 |
-----------------------------

例如:

decimal(20,6)=> 小數點左邊14位,小數點右邊6位 => 小數點左邊分組為5 + 9,需要3個字節+4個字節存儲,小數點一個分組,需要3個字節存儲 => 總共需要10個字節
decimal(18,9)=> 小數點左邊9位數,小數點右邊9位數 => 分別使用4個字節存儲 => 共需要 8個字節
decimal(18,2)=> 小數點左邊16位數,小數點右邊2位數 => 分組為7 + 9,需要8個字節存儲,小數點右邊1個字節存儲 => 共需要9個字節

通過key_len分析聯合索引

如下所示,我們定義了一個表t,表t包含a、b、c、d共4列:

mysql> show create table t\G
*************************** 1. row ***************************
    Table: t
Create Table: CREATE TABLE `t` (
 `a` int(11) NOT NULL,
 `b` int(11) DEFAULT NULL,
 `c` int(11) DEFAULT NULL,
 `d` int(11) DEFAULT NULL,
 PRIMARY KEY (`a`),
 KEY `ix_x` (`b`,`d`,`c`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

現在要執行SQL語句如下:

select a from t where b = 5 and d = 10 order by c;

假設我們有一個索引ix_x(b,d,c),通過explain得到如下輸出:

mysql> explain select a from t where b = 5 and d = 10 order by c;
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref     | rows | Extra          |
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
| 1 | SIMPLE   | t   | ref | ix_x     | ix_x | 10   | const,const |  1 | Using where; Using index |
+----+-------------+-------+------+---------------+------+---------+-------------+------+--------------------------+
1 row in set (0.00 sec)

可以看到,查詢語句使用了聯合索引中的b和d兩列來過濾數據。

如果我們定義的聯合索引不是`ix_x(b,d,c)`,而是`ix_x(b, c, d)`,通過explain得到的輸入如下:

mysql> alter table t drop index ix_x;
mysql> alter table t add index ix_x(b, c, d);
mysql> explain select a from t where b = 5 and d = 10 order by c;
+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref  | rows | Extra          |
+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+
| 1 | SIMPLE   | t   | ref | ix_x     | ix_x | 5    | const |  2 | Using where; Using index |
+----+-------------+-------+------+---------------+------+---------+-------+------+--------------------------+
1 row in set (0.00 sec)

key_len為5,也就是說,只用到了聯合索引中的第一列,可以看到,雖然聯合索引包含了我們要查詢的所有列,但是,由于定義的順序問題,SQL語句并不能夠充分利用索引。

您可能感興趣的文章:
  • mysql計算時間差函數
  • Mysql中通過生日計算年齡的多種方法
  • 在php和MySql中計算時間差的方法
  • mysql 字符串長度計算實現代碼(gb2312+utf8)
  • Mysql數據庫的QPS和TPS的意義和計算方法
  • MySQL幾點重要的性能指標計算和優化方法總結
  • 淺談mysql explain中key_len的計算方法
  • mysql日期和時間的間隔計算實例分析
  • MySQL日期加減函數詳解
  • mysql 觸發器創建與使用方法示例
  • MySQL觸發器基本用法詳解【創建、查看、刪除等】
  • mysql累加計算實現方法詳解

標簽:內蒙古 成都 湖州 重慶 常德 貴州 臨沂 天津

巨人網絡通訊聲明:本文標題《MySQL的查詢計劃中ken_len的值計算方法》,本文關鍵詞  MySQL,的,查詢,計劃,中,ken,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《MySQL的查詢計劃中ken_len的值計算方法》相關的同類信息!
  • 本頁收集關于MySQL的查詢計劃中ken_len的值計算方法的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    99re8在线精品视频免费播放| 久久精品国产成人一区二区三区 | 日韩国产高清影视| 亚洲1区2区3区视频| 99久久精品国产精品久久| 日韩一区二区电影| 亚洲h动漫在线| 欧美色电影在线| 日韩电影在线免费| 日韩视频一区二区三区| 激情综合色丁香一区二区| 日韩一区二区精品在线观看| 日韩av成人高清| 99视频在线观看一区三区| 亚洲精品在线一区二区| 91精品国产综合久久精品app| 亚洲欧洲av另类| 日韩有码一区二区三区| 欧美大度的电影原声| 亚洲最新视频在线观看| 91精品国产麻豆| 一区二区三区蜜桃| 51午夜精品国产| 视频一区视频二区中文字幕| 中文字幕一区二区三区在线观看 | 丁香婷婷综合色啪| 欧美在线一二三四区| 精品国产三级a在线观看| 日韩欧美国产综合| 一区二区三区在线观看动漫| 欧美日韩一级黄| 国产精品自拍一区| 精品亚洲porn| 国产精品美女一区二区| 日本少妇一区二区| 国产精品久久久久影院| 九九国产精品视频| 日韩美女一区二区三区| 91蜜桃免费观看视频| 国产日韩高清在线| 天天综合网 天天综合色| 欧美大片一区二区| 色综合视频一区二区三区高清| 亚洲视频在线观看一区| 免费观看一级特黄欧美大片| 亚洲女女做受ⅹxx高潮| 91在线高清观看| 1000部国产精品成人观看| av爱爱亚洲一区| 一区二区三区在线影院| 久久精子c满五个校花| 成人福利在线看| 韩国女主播成人在线| 国产精品电影院| 在线观看www91| 国产真实精品久久二三区| 欧美va亚洲va国产综合| 国产麻豆精品久久一二三| 国产精品天干天干在线综合| 日韩成人一区二区| 久久综合久色欧美综合狠狠| 岛国一区二区在线观看| 欧美三级日本三级少妇99| 日韩制服丝袜av| 久久精品亚洲精品国产欧美kt∨| 成人午夜在线播放| 偷拍一区二区三区四区| 久久久美女毛片| 欧日韩精品视频| 国产永久精品大片wwwapp| 夜夜亚洲天天久久| 一区二区在线观看视频| 国产在线播放一区| 亚洲人成精品久久久久久| 制服.丝袜.亚洲.另类.中文 | 欧美日本乱大交xxxxx| 国产一区二区三区最好精华液| 中文字幕一区二区三区蜜月| 日韩视频在线一区二区| 91免费看`日韩一区二区| 蜜桃视频在线观看一区二区| 国产精品亚洲成人| 国产精品天美传媒沈樵| 欧美日韩成人一区| 自拍视频在线观看一区二区| 91福利在线导航| 欧美aaaaa成人免费观看视频| 在线电影国产精品| 成人涩涩免费视频| 首页国产欧美久久| 中文字幕在线免费不卡| 5月丁香婷婷综合| 91久久精品日日躁夜夜躁欧美| 国内精品写真在线观看| 亚洲国产精品av| 国产精品99久久久久久久女警| 国产91精品一区二区| 久久激五月天综合精品| 久久久久久久久久久电影| 5858s免费视频成人| 久久精品国产77777蜜臀| 亚洲一二三专区| 一区二区三区小说| ...xxx性欧美| 欧美午夜精品电影| 日本高清不卡一区| 色吧成人激情小说| 成人小视频免费观看| 国产suv精品一区二区883| 精品一区二区成人精品| 九九九精品视频| 奇米亚洲午夜久久精品| 午夜精品爽啪视频| 日韩一区精品字幕| 丝袜美腿高跟呻吟高潮一区| 国产精品成人网| 国产精品高清亚洲| 亚洲视频一区在线| 亚洲午夜av在线| 亚洲欧美激情一区二区| 亚洲视频一区二区在线| 91同城在线观看| 欧美专区在线观看一区| 欧美猛男超大videosgay| 欧美性猛交xxxxxxxx| 欧美日韩久久久| 欧美一二三区在线观看| 日韩精品一区二区三区四区视频| 日韩美女天天操| 久久久久九九视频| 国产精品第五页| 亚洲精品日日夜夜| 日本在线不卡视频| 国产一区二区免费看| av在线不卡观看免费观看| 日韩福利电影在线观看| 九一九一国产精品| 亚洲精品伦理在线| 三级久久三级久久| 国产精品网友自拍| 亚洲高清免费一级二级三级| 午夜成人在线视频| 国产一区二区三区国产| 色综合一个色综合| 91精品麻豆日日躁夜夜躁| 国产欧美一区二区精品性色超碰| 亚洲精品一卡二卡| 精品无码三级在线观看视频| av亚洲产国偷v产偷v自拍| 欧美三级资源在线| 久久蜜桃av一区精品变态类天堂 | 亚洲r级在线视频| 欧美日韩午夜在线| 99精品视频一区二区| 97精品久久久久中文字幕| 欧美在线高清视频| 精品噜噜噜噜久久久久久久久试看| 久久久久久免费毛片精品| 日韩黄色小视频| 91丨九色丨黑人外教| 久久综合中文字幕| 91网上在线视频| 久久精品亚洲麻豆av一区二区| 亚洲成av人片| 97久久久精品综合88久久| 久久亚洲一区二区三区四区| 久久人人爽爽爽人久久久| 亚洲国产精品尤物yw在线观看| 国内精品伊人久久久久av一坑 | 亚洲精品国产精华液| 老司机精品视频导航| 91蜜桃网址入口| 夜夜精品视频一区二区| 国产精品一区三区| 91精品国产一区二区三区香蕉| 一区二区三区毛片| 91影院在线免费观看| 欧美性欧美巨大黑白大战| 中文字幕日本乱码精品影院| 国产精品亚洲人在线观看| 本田岬高潮一区二区三区| 丁香啪啪综合成人亚洲小说| 欧美日韩国产另类一区| 亚洲另类在线制服丝袜| 色视频欧美一区二区三区| 日韩精品一级中文字幕精品视频免费观看 | 欧美性猛交一区二区三区精品| 亚洲已满18点击进入久久| bt欧美亚洲午夜电影天堂| 国产精品色一区二区三区| 色综合色狠狠综合色| 91成人看片片| www.日韩精品| 亚洲激情校园春色| 日韩网站在线看片你懂的| 国产在线精品一区二区三区不卡| 亚洲第一久久影院| 久久九九全国免费| 一区二区三区四区国产精品| 91浏览器在线视频|