正確理解Mysql中的列索引和多列索引
Mysql數(shù)據(jù)庫提供兩種類型的索引,如果沒正確設(shè)置,索引的利用效率會大打折扣卻完全不知問題出在這。
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) );
以上創(chuàng)建的其實是一個多列索引,創(chuàng)建列索引的代碼如下:
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)索引列值創(chuàng)建的值的一個排序數(shù)組。 當(dāng)查詢語句的條件中包含last_name 和 first_name時,例如:
SELECT * FROM test WHERE last_name='Kun' AND first_name='Li';
sql會先過濾出last_name符合條件的記錄,在其基礎(chǔ)上在過濾first_name符合條件的記錄。那如果我們分別在last_name和first_name上創(chuàng)建兩個列索引,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';
多列建索引比對每個列分別建索引更有優(yōu)勢,因為索引建立得越多就越占磁盤空間,在更新數(shù)據(jù)的時候速度會更慢。
另外建立多列索引時,順序也是需要注意的,應(yīng)該將嚴格的索引放在前面,這樣篩選的力度會更大,效率更高。
相關(guān)文章
sqoop export導(dǎo)出 map100% reduce0% 卡住的多種原因及解決
這篇文章主要介紹了sqoop export導(dǎo)出 map100% reduce0% 卡住的多種原因及解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2021-01-01淺談MySQL中授權(quán)(grant)和撤銷授權(quán)(revoke)用法詳解
下面小編就為大家?guī)硪黄獪\談MySQL中授權(quán)(grant)和撤銷授權(quán)(revoke)用法詳解。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-09-09mysql中整數(shù)數(shù)據(jù)類型tinyint詳解
大家好,本篇文章主要講的是mysql中整數(shù)數(shù)據(jù)類型tinyint詳解,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽2021-12-12mysql日志文件General_log和Binlog開啟及詳解
MySQL中的數(shù)據(jù)變化會體現(xiàn)在上面日志中,下面這篇文章主要給大家介紹了關(guān)于mysql日志文件General_log和Binlog開啟及詳解的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下2022-07-07mysql取得datetime類型的數(shù)據(jù),后面會跟個.0的實現(xiàn)方法
下面小編就為大家?guī)硪黄猰ysql取得datetime類型的數(shù)據(jù),后面會跟個.0的實現(xiàn)方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03MySQL?數(shù)據(jù)庫如何實現(xiàn)存儲時間
這篇文章主要介紹了MySQL?數(shù)據(jù)庫如何實現(xiàn)存儲時間,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03