准確懂得Mysql中的列索引和多列索引。本站提示廣大學習愛好者:(准確懂得Mysql中的列索引和多列索引)文章只能為提供參考,不一定能成為您想要的結果。以下是准確懂得Mysql中的列索引和多列索引正文
Mysql數據庫供給兩品種型的索引,假如沒准確設置,索引的應用效力會年夜打扣頭卻完整不知成績出在這。
CREATE TABLE test (
id INT NOT NULL,
last_name CHAR(30) NOT NULL,
first_name CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (last_name,first_name)
);
以上創立的實際上是一個多列索引,創立列索引的代碼以下:
CREATE TABLE test (
id INT NOT NULL,
last_name CHAR(30) NOT NULL,
first_name CHAR(30) NOT NULL,
PRIMARY KEY (id),
INDEX name (last_name),
INDEX_2 name (first_name)
);
一個多列索引可以以為是包括經由過程歸並(concatenate)索引列值創立的值的一個排序數組。 當查詢語句的前提中包括last_name 和 first_name時,例如:
SELECT * FROM test WHERE last_name='Kun' AND first_name='Li';
sql會先過濾出last_name相符前提的記載,在其基本上在過濾first_name相符前提的記載。那假如我們分離在last_name和first_name上創立兩個列索引,mysql的處置方法就紛歧樣了,它會選擇一個最嚴厲的索引來停止檢索,可以懂得為檢索才能最強的誰人索引來檢索,別的一個應用不上了,如許後果就不如多列索引了。
然則多列索引的應用也是須要前提的,以下情勢的查詢語句可以或許應用上多列索引:
SELECT * FROM test WHERE last_name='Widenius';
SELECT * FROM test WHERE last_name='Widenius' AND first_name='Michael';
SELECT * FROM test WHERE last_name='Widenius' AND (first_name='Michael' OR first_name='Monty');
SELECT * FROM test WHERE last_name='Widenius' AND first_name >='M' AND first_name < 'N';
以下情勢的查詢語句應用不上多列索引:
SELECT * FROM test WHERE first_name='Michael';
SELECT * FROM test WHERE last_name='Widenius' OR first_name='Michael';
多列建索引比對每一個列分離建索引更有優勢,由於索引樹立得越多就越占磁盤空間,在更新數據的時刻速度會更慢。
別的樹立多列索引時,次序也是須要留意的,應當將嚴厲的索引放在後面,如許挑選的力度會更年夜,效力更高。