《Mysql實(shí)例mysql 松散的索引掃描(Loose index scan)》要點(diǎn):
本文介紹了Mysql實(shí)例mysql 松散的索引掃描(Loose index scan),希望對(duì)您有用。如果有疑問(wèn),可以聯(lián)系我們。
MYSQL教程優(yōu)化Group By最有效的辦法是當(dāng)可以直接使用索引來(lái)完全獲取需要group的字段.使用這個(gè)訪問(wèn)方法時(shí),MySQL使用對(duì)關(guān)鍵字排序的索引的類(lèi)型(比如BTREE索引).這使得索引中用于group的字段不必完全涵蓋WHERE條件中索引對(duì)應(yīng)的key.由于只包含索引中關(guān)鍵字的一部分,因此稱(chēng)為松散的索引掃描.
MYSQL教程歷史上MySQL不能做松散的索引掃描,這種方式可以?huà)呙杷饕姆沁B續(xù)部分,假定下面的例子中,在列(a,b)上有一索引,要運(yùn)行下面的查詢(xún):
MYSQL教程mysql> SELECT … FROM tbl WHERE b BETWEEN 2 AND 3;
MYSQL教程因?yàn)樗饕龔牧衋開(kāi)始,但是WHERE沒(méi)制定列a,MySQL將做全表掃描來(lái)消除不匹配的行.
很希望有快的方式來(lái)執(zhí)行查詢(xún).某些索引結(jié)構(gòu)(不是MySQL)讓你定位到每個(gè)范圍的開(kāi)始,掃描到范圍結(jié)束,然后跳到下一范圍的開(kāi)始.
這當(dāng)然是相對(duì)簡(jiǎn)單的例子,也可以很容易通過(guò)再加一個(gè)不同的索引來(lái)達(dá)到目的.實(shí)際上,很多時(shí)候添加另一個(gè)索引不一定能解決問(wèn)題.一個(gè)例子是某些查詢(xún)?cè)谒饕牡谝粋€(gè)列上有范圍條件在第二個(gè)列上有等價(jià)條件.
從MySQL 5.0 開(kāi)始,松散索引掃描在一定條件是可能的,比如在分組查詢(xún)中找到最大和最小值:
MYSQL教程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
MYSQL教程在下面一些情況下是可以使用松散索引掃描的:
? 查詢(xún)針對(duì)一個(gè)單表.
? GROUP BY包括索引的第1個(gè)連續(xù)部分(如果對(duì)于GROUP BY,查詢(xún)有一個(gè)DISTINCT子句,則所有DISTINCT的屬性指向索引開(kāi)頭).
? 只使用累積函數(shù)(如果有)MIN()和MAX(),并且它們均指向相同的列.
? 索引的任何其它部分(除了那些來(lái)自查詢(xún)中引用的GROUP BY)必須為常數(shù)(也就是說(shuō),必須按常量數(shù)量來(lái)引用它們),但MIN()或MAX() 函數(shù)的參數(shù)例外.
轉(zhuǎn)載請(qǐng)注明本頁(yè)網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/6420.html