索引对性能的影响:比如,数据表有一千条数据,只需要根据条件查询其中的一条,只需要针对这一列创建索引,
只扫描这一条就可以了,如果不创立索引则要扫描1000条,挨个看才能找到这条数据
索引的不良影响:
1、降低写的速度
唯一索引和主键索引的区别:
组合索引:eg:比如说要查询一本书的第一章内容在那一条,这个时候可以对章节做一个索引,但是如果要查第一章的第二小节,这样如果只创建了章的索引,需要找到第一章后,把所有小节都扫一遍,这样的话索引可以用到,但是索引的范围还是有一点大,为了降低索引范围,可以对小节再做一个索引。对章和小节这两个列同时创建一个组合索引,这样去找第一章的第二小节,就可以快速定位到
外键和全文索引基本上不去用,外键的话通常都是用业务逻辑去实现数据的关联,全文索引的限制多也不用,用全文检索引擎替代,如斯芬克斯等
对于原问题的解答:
普通索引没有其他的约束,唯一索引有唯一性约束,主键索引也有唯一约束,但是主键一张表只能有一个,唯一索引可以多个,而且主键是唯一索引,唯一索引不一定是主键索引,主键可以与外键可以进行联合数据的级联操作,保证数据的完整性。组合索引是将多个列在一起创建索引,可以覆盖多个列
Mysql索引创建原则
关于复合索引:
前缀原则:
上图创建复合索引KEY(a,b,c),并不是对a,b,c分别创建三个索引,其实是创建了一个索引,作用在a,b,c这样一个组合上面,效果就是缩短查询范围,例如章,小节,段落的例子
索引使用原则
第二个是like查询使用索引,%不能在前
如:
即使对name创建了索引,这个索引也会失效,因为like%不能在前
上图如果想用到索引要去掉like的前%。如果需求就是查询包含wang的,那就用全文索引引擎去实现。ES或斯芬克斯等
例如一个表有100条数据,把id设置为索引,而查询条件是where id > 1 and id < 100;
此时mysql会认为,本身就100条数据,要查询
其中的98条数据,而这98条数据都需要去看索引就会很慢了,mysql会直接把这100条数据都扫一遍,然后返回其中的98条,这样相比再多一个查询索引的步骤显得效率更高,mysql会自动选择放弃索引,不用手动去处理,是其内部优化器做的。
如:
此时索引name就不生效,因为本身是字符串类型,而where查询是整型
把100加引号就可以使用索引
解:
答:遵循前缀原则,要看查询条件(组合索引和复合索引是一回事儿)
作者:hello大象
链接:https://www.jianshu.com/p/4595e64e74c9
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
网友评论