前言
本文主要給大家介紹了關(guān)于MySQL中索引與視圖的使用與區(qū)別的相關(guān)內(nèi)容,分享出來供大家參考學(xué)習(xí),下面話不多說了,來一起看看詳細(xì)的介紹吧。
索引
一、概述
所有的Mysql列類型都可以被索引。
mysql支持BTREE索引、HASH索引、前綴索引、全文本索引(FULLTEXT)【只有MyISAM引擎支持,且僅限于char,varchar,text列】、空間列索引【只有MyISAM引擎支持,且索引的字段必須非空】,但不支持函數(shù)索引。
MyISAM和InnoDB存儲(chǔ)引擎的表默認(rèn)創(chuàng)建BTREE索引,
MEMORY存儲(chǔ)引擎的表默認(rèn)創(chuàng)建HASH索引。
二、創(chuàng)建索引
create index語法為:
| create [unique|fulltext|spatial] index index_name [using index_type]on tbl_name(index_col_name, ...);index_col_name: col_name [(length)] [asc/desc] |
也可使用alter table增加索引,語法為:
| ALTER [IGNORE] TABLE tbl_name alter_specification [, alter_specification] ...alter_specification: ... ADD INDEX [index_name] [index_type] (index_col_name,...) ... |
例如:為city表創(chuàng)建10個(gè)字節(jié)的前綴索引
| mysql> create index cityName on city(Name(10));mysql> alter table city add index cityName(Name(10)); |
三、查看索引
可以使用show index from table;查看table表的當(dāng)前所有索引。
四、刪除索引
| drop index index_name on tbl_name; |
五、BTREE索引和HASH索引
MEMORY存儲(chǔ)引擎的表可以選擇使用BTREE索引和HASH索引
BTREE索引:
當(dāng)使用>、<、=、>=、<=、between、!=、<>或者like xxx(xxx不以通配符開始)操作符時(shí),都可以使用相關(guān)列上的BTREE索引。HASH索引使用注意事項(xiàng):(和HASH表的局限性有關(guān))
只能用于使用=或<=>操作符之間的等式比較。 優(yōu)化器不能使用HASH索引來加速order by操作。 mysql不能確定在兩個(gè)值之前大約有多少行,會(huì)影響查詢一定的效率。 只能使用整個(gè)關(guān)鍵字搜索一行。六、設(shè)計(jì)索引的原則
搜索的索引列,不一定是要選擇的列。最適合索引的列是出現(xiàn)在where子句中的列,而不是出現(xiàn)select后中的列。
使用唯一索引。選擇容易數(shù)值容易區(qū)分的列進(jìn)行索引。例如對生日的索引要比對性別的索引要好,因?yàn)樯盏牧芯哂胁煌闹担容^容易區(qū)分,而性別列只有M和F,此時(shí)索引用處不大,每次索引都得出大約一半的行。
使用短索引。對字符串的前綴索引中通常會(huì)指定一個(gè)前綴長度,如果在前10到20個(gè)字符內(nèi),多數(shù)值是唯一的,那么就可以不必對整個(gè)列進(jìn)行索引,而是對前10到20個(gè)字符進(jìn)行索引。這樣能夠節(jié)省索引空間,減少I/O時(shí)間,提高查詢效率。
新聞熱點(diǎn)
疑難解答
圖片精選