数据库索引
索引的含义和特点
索引是一个单独的、存储在磁盘上的数据库结构,包含着对数据表里所有记录的引用指针。
mysql中索引的存储类型有两种:BTREE和HASH
其中MyISAM和InnoDB存储引擎只支持BTREE索引;MEMORY/HEAP存储引擎可以支持HASH和BTREE索引。
索引的优点:
1.通过唯一索引可以达到库表的每行都是唯一性的
2.可以加快查询速度
3.可以加快表之间的连接
4.尤其在分组和排序中建索引可以显著提高性能
缺点:
1.创建和维护索引耗费时间
2.索引需要占用磁盘空间
3.对表进行insert、update、delete的时候,索引也会动态的维护。
索引的分类
普通索引和唯一索引
单列索引和组合索引
全文索引
空间索引
其中组合索引遵循最左前缀集合,比如你用a,b,c三个表字段作为组合索引,只有查询条件包含a时索引才会起作用。全文索引和空间索引只能在存储引擎为MyISAM的表中创建。
索引的设计原则:
1.索引不是越多越好
2.避免对经常更新的表建索引
3.数据量小的表不要使用索引
4.数据相同值多的不建议使用索引
5.能建唯一索引时优先使用唯一索引
6.频繁分组排序的字段上建索引
创建索引
新建表的时候创建索引
CREATE TABLE table_name [col_name data_type]
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name) [ASC | DESC]
FULLTEXT是全文索引、SPATIAL是空间索引只有MYISAM存储引擎支持。
已经存在的表上创建索引
1.ALTER TABLE table_name ADD
[UNIQUE | FULLTEXT | SPATIAL] [INDEX | KEY] [index_name] (col_name) [ASC | DESC]
2.CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name ON table_name
(col_name) [ASC | DESC]
查看索引
1.SHOW CREATE TABLE table_name
2.SHOW INDEX FROM table_name
删除索引
1.ALTER TABLE table_name DROP INDEX index_name
2.DROP INDEX index_name ON table_name
索引其他操作
explain也可以查看索引,以及查看索引性能
组合索引最左前缀