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

首頁 > 數(shù)據庫 > MySQL > 正文

mysql 松散的索引掃描(Loose index scan)

2020-01-18 22:24:29
字體:
來源:轉載
供稿:網友

優(yōu)化Group By最有效的辦法是當可以直接使用索引來完全獲取需要group的字段。使用這個訪問方法時,MySQL使用對關鍵字排序的索引的類型(比如BTREE索引)。這使得索引中用于group的字段不必完全涵蓋WHERE條件中索引對應的key。由于只包含索引中關鍵字的一部分,因此稱為松散的索引掃描。

歷史上MySQL不能做松散的索引掃描,這種方式可以掃描索引的非連續(xù)部分,假定下面的例子中,在列(a,b)上有一索引,要運行下面的查詢:

mysql> SELECT … FROM tbl WHERE b BETWEEN 2 AND 3;

因為索引從列a開始,但是WHERE沒制定列a,MySQL將做全表掃描來消除不匹配的行。
很希望有快的方式來執(zhí)行查詢。某些索引結構(不是MySQL)讓你定位到每個范圍的開始,掃描到范圍結束,然后跳到下一范圍的開始。
這當然是相對簡單的例子,也可以很容易通過再加一個不同的索引來達到目的。實際上,很多時候添加另一個索引不一定能解決問題。一個例子是某些查詢在索引的第一個列上有范圍條件在第二個列上有等價條件。
從MySQL 5.0 開始,松散索引掃描在一定條件是可能的,比如在分組查詢中找到最大和最小值:

mysql> EXPLAIN SELECT actor_id, MAX(film_id)
-> FROM sakila.film_actor
-> GROUP BY actor_idG
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: film_actor
type: range
possible_keys: NULL
key: PRIMARY
key_len: 2
ref: NULL
rows: 396
Extra: Using index for group-by

在下面一些情況下是可以使用松散索引掃描的:
• 查詢針對一個單表。
• GROUP BY包括索引的第1個連續(xù)部分(如果對于GROUP BY,查詢有一個DISTINCT子句,則所有DISTINCT的屬性指向索引開頭)。
• 只使用累積函數(shù)(如果有)MIN()和MAX(),并且它們均指向相同的列。
• 索引的任何其它部分(除了那些來自查詢中引用的GROUP BY)必須為常數(shù)(也就是說,必須按常量數(shù)量來引用它們),但MIN()或MAX() 函數(shù)的參數(shù)例外。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 南阳市| 金山区| 武穴市| 博湖县| 华池县| 如东县| 济宁市| 米泉市| 抚顺县| 平果县| 新龙县| 龙胜| 浪卡子县| 佳木斯市| 卢氏县| 梁平县| 岳阳县| 信丰县| 德兴市| 开原市| 长乐市| 凤山市| 墨脱县| 且末县| 福海县| 辽中县| 固镇县| 定南县| 甘肃省| 陇西县| 成都市| 修水县| 邵东县| 常宁市| 正镶白旗| 彩票| 崇阳县| 鄄城县| 龙川县| 济阳县| 汤原县|