索引
优势:
可以提高数据的检索效率,降低数据库的IO成本。
通过索引列队数据进行排序,降低数据排序的成本,降低了cpu的消耗。
被索引的列会自动排序。
如果按照索引列的顺序排序,对应order by语句来说,效率就会提高很多
where 索引列,在存储引擎层处理
覆盖索引,不需要回表查询
劣势:
索引会占据磁盘空间
索引虽然会提高查询效率,但是会降低更新表的效率。比如每次对表进行读写,MySQL不仅要保存数据,还有保存或者更新对应的索引文件
单列索引
普通索引:MySQL中基本索引类型,没有什么限制,允许在定义多音的列中插入重复值和空值,纯粹为了查询数据更快一点
唯一索引:索引列中的值必须是唯一的,但是允许为空值
主键索引:一种特殊的索引,不允许为空值
组合索引
在表中的多个字段组合上创建的索引
组合索引的引用,需要遵循最左前缀原则
一般情况下,建议使用组合索引代替单列索引
索引的原理
存储结构
索引是在存储引擎中实现的,也就是说不同的存储引擎,会使用不同的索引
MyISAM和Innodb存储引擎:只支持B+TREE索引,也就说默认使用BTREE,不能更换
MEMORY/HEAP存储引擎:支持HASH和BTREE索引