索引是資料庫中用來提高效能的最常用工具,下面簡單介紹一下索引的型別和設計原則。
常用引擎的索引方式 特點
myisam
innodb
memory
merge
b樹索引
支援(預設)
支援(預設)
支援支援
雜湊索引
支援(預設)
全文索引
支援字首索引
支援支援
索引在建立表的時候可以同時建立,也可以隨時增加新的索引,建立新索引的語法為:
create [unique|fulltext|spatial] index index_name [using index_type] on tbl_name( col_name [(length)] [asc|desc])
使用alter table 語法來增加索引,與上面類似。
mysql> create index cityname on city (city(10));
query ok, 0 rows affected (0.03 sec)
records: 0 duplicates: 0 warnings: 0
mysql> explain select * from city where city = 'fuzhou' \g;
*************************** 1. row ***************************
id: 1
select_type: ******
table: city
partitions: null
type: ref
possible_keys: cityname
key: cityname
key_len: 32
ref: const
rows: 1
filtered: 100.00
extra: using where
1 row in set, 1 warning (0.00 sec)
刪除索引的語法為:
drop index index_name on tbl_name
mysql> drop index cityname on city;
query ok, 0 rows affected (0.01 sec)
records: 0 duplicates: 0 warnings: 0
下面列出的是一些已有的原則,建立索引時盡量遵守以便提公升效率。
memory型別表同時支援btree索引和hash索引,這兩個索引也有一些不同的適應範圍。
hash索引需要注意:
而btree索引就可以使用範圍搜尋和模糊搜尋,並使用相關列上的索引。
看下面的例子:
下列範圍查詢btree索引和hash索引都適用:
select * from t1 where key_col=1,or key_col in (15,18,20);
下列範圍查詢只適合btree索引:
select * from t1 where key_col > 1 and key_col < 10;
select * from t1 where key_col like 'ab%' or key_col between 'lisa' and 'simon';
當我們建立乙個memory型別的表時,預設使用的是hash索引,而此時如果對索引字段進行範圍查詢,此時的hash沒有起到作用,實際上還是進行的全表掃瞄;只有將其改為btree索引時才可以有效通過索引來提高效率。
因此,如果建立memory表,就需要注意sql語句的編寫確保能使用上索引;如果一定要使用範圍查詢,那麼應該建立成btree索引的表。
7 mysql 索引的設計和使用
索引用於快速找出在某個列中有一特定值的行。不使用索引,mysql必須從第1條記錄開始然後讀完整個表直到找出相關的行。表越大,花費的時間越多。如果表中查詢的列有乙個索引,mysql能快速到達乙個位置去搜尋到資料檔案的中間,沒有必要看所有資料。在mysql中所有的型別資料列都可以被索引,對相關列使用索引...
索引的設計和使用
1 索引概述 1 可以定義每個表的最大索引數 至少16個 和最大索引長度 總索引長度只是256位元組 2 myisam和innodb儲存引擎的表預設建立的都是btree索引。3 mysql目前不支援函式索引 4 支援字首索引 對索引欄位的前n非字元建立索引 myisam索引的字首長度可以達到1000...
MySQL5 0中索引的設計和使用
很多開發者對mysql還是有深厚的感情,雖然現在已經被收購。至於mysql的前途到底是否會被開源組織接手還是怎麼樣?這個就暫時無解了。不過我想至少mysql的確有它的優勢。廢話就不說了。下面討論下mysql5.0中的索引的設計和使用。任何東西設計的好,那麼使用起來就順手。不過很多時候給出設計什麼規則...