mysql索引类型index type:
普通索引:NORMAL
全文索引:FULLTEXT
空间索引:SPATIAL
主键索引:UNIQUE
mysql索引方法index method:
BTREE :通过底层B Tree数据结构缩小扫描范围,底层索引进行了排序,分区,索引会携带数据在表中的“物理地址”,最终通过索引检索到数据之后,获取到关联的物理地址,通过物理地址定位表中的数据,效率是最高的。
HASH:哈希索引原理其实就是hash表,搜索时间效率O(1),搜索效率好,也意味着磁盘IO花费少,mysql底层使用的是链式哈希表,结构如下,每一个bucket就是一个个哈希桶,也就是哈希链表的头结点。哈希结构天然的需要耗费空间资源,是一种用空间换时间的做法
创建索引
添加PRIMARY KEY(主键索引)
ALTER TABLE table_name
ADD PRIMARY KEY ( column
)
添加UNIQUE(唯一索引)
ALTER TABLE table_name
ADD UNIQUE ( column
)
添加INDEX(普通索引)
ALTER TABLE table_name
ADD INDEX index_name ( column
)
添加FULLTEXT(全文索引)
ALTER TABLE table_name
ADD FULLTEXT ( column
)
添加多列索引
ALTER TABLE table_name
ADD INDEX index_name ( column1
, column2
, column3
)
修改索引
mysql中没有真正意义上的修改索引,只有先删除之后在创建新的索引才可以达到修改的目的,原因是mysql在创建索引时会对字段建立关系长度等,只有删除之后创建新的索引才能创建新的关系保证索引的正确性;
如:将login_name_index索引修改为单唯一索引;
DROP INDEX login_name_index ON user
;
ALTER TABLE user
ADD UNIQUE login_name_index ( login_name
);
删除索引
格式:DROP INDEX 索引名称 ON 表名;
DROP INDEX login_name_index ON user
;
查询索引
格式:SHOW INDEX FROM 表名;
SHOW INDEX FROM user
;
索引失效原因
1、注意一定不可以用select * … 可以看到type!=all了,说明使用了索引。
2、模糊查询的时候,第一个通配符使用的是%,这个时候索引是失效。