1. 程式人生 > >10.Mysql索引

10.Mysql索引

mys 一個 col 應該 sql 不能 exp tab 其中

10.索引的設計和使用
10.1 索引概述
BTREE索引:Mysql(MyIASM和Innodb)默認的索引類型。
前綴索引:對索引字段的前N個字符創建索引。N的最大取值和存儲引擎有關,MyIASM支持最大前綴長度為1000字節,Innodb引擎支持最大前綴長度為767字節。
全文索引:可用於全文搜索。僅有MyIASM支持全文索引,且只限於CHAR、VARCHAR、Text類型的列。
空間類型索引:僅有MyIASM支持空間類型索引,索引列必須為非空。
HASH索引:僅有MEMORY支持HASH索引。
創建索引語法:
create [unique | fulltext | spatial] index index_name [using index_type] on table_name (col_name[(length)] [ASC|DESC]);

說明:
index_type取值為BTREE、RTRE、Hash
例子:
create index idx_emp_ename on emp (ename(5));
分析查詢語句,檢查是否使用了索引:
explain select * from emp where ename=‘SCOTT‘;
刪除索引語法:
drop index index_name on table_name;
例子:
drop index idx_emp_ename on emp;

10.2 設計索引的原則
最適合索引的列是出現在where子句中的列,或連接子句中指定的列,而不是出現在select關鍵字後的選擇列表中的列;
考慮某列中值的分布,索引的列的基數越大,索引的效果越好;

使用短索引,對字符串索引時應該指定一個前綴長度,即前N個字符就能大致區分唯一紀錄時,避免對整列添加索引。
復合索引,選擇合適的最左前綴列;
不要過度索引,索引會占用額外的磁盤空間,並降低DML性能。
Innodb引擎的表記錄按主鍵順序保存,應該給表盡量指定主鍵,主鍵列要選擇較短的數據類型,其它非主鍵索引會保存主鍵列。

10.3 Btree索引和Hash索引
Hash索引只能用於等值比較(=,<=>),不能用於範圍比較(>,<,>=,<=,!=,<>,between...and,like),不能用於排序操作(order by),只能使用整個關鍵字來搜索一行。

Btree索引可用於等值比較和範圍比較(>,<,>=,<=,!=,<>,between...and,like)。
MEMORY引擎表默認創建Hash索引,在範圍比較時應創建Btree索引。

10.4 小結
索引用於快速找出特定的行,不是用索引時將順序掃描所有的行;
如果條件列有索引,將根據條件值在索引中查找記錄主鍵,根據主鍵在數據中訪問特定的行;
如果需要訪問表中很大一部分行(20%),順序讀取將比索引掃描更快,索引不起效。
Mysql類型分為BTREE索引、RTREE索引、Hash索引;
其中:主鍵索引、唯一鍵索引、全文索引、普通索引都是BTREE索引,空間索引是RTREE索引。

10.Mysql索引