15、MySQL创建高性能索引



15、MySQL创建高性能索引_第1张图片

索引对性能的影响:比如,数据表有一千条数据,只需要根据条件查询其中的一条,只需要针对这一列创建索引,

只扫描这一条就可以了,如果不创立索引则要扫描1000条,挨个看才能找到这条数据
15、MySQL创建高性能索引_第2张图片

索引的不良影响:
1、降低写的速度
15、MySQL创建高性能索引_第3张图片

15、MySQL创建高性能索引_第4张图片

15、MySQL创建高性能索引_第5张图片

唯一索引和主键索引的区别:


15、MySQL创建高性能索引_第6张图片

组合索引:eg:比如说要查询一本书的第一章内容在那一条,这个时候可以对章节做一个索引,但是如果要查第一章的第二小节,这样如果只创建了章的索引,需要找到第一章后,把所有小节都扫一遍,这样的话索引可以用到,但是索引的范围还是有一点大,为了降低索引范围,可以对小节再做一个索引。对章和小节这两个列同时创建一个组合索引,这样去找第一章的第二小节,就可以快速定位到
外键和全文索引基本上不去用,外键的话通常都是用业务逻辑去实现数据的关联,全文索引的限制多也不用,用全文检索引擎替代,如斯芬克斯等
15、MySQL创建高性能索引_第7张图片

对于原问题的解答:
普通索引没有其他的约束,唯一索引有唯一性约束,主键索引也有唯一约束,但是主键一张表只能有一个,唯一索引可以多个,而且主键是唯一索引,唯一索引不一定是主键索引,主键可以与外键可以进行联合数据的级联操作,保证数据的完整性。组合索引是将多个列在一起创建索引,可以覆盖多个列

Mysql索引创建原则

15、MySQL创建高性能索引_第8张图片

15、MySQL创建高性能索引_第9张图片

关于复合索引:
前缀原则:


15、MySQL创建高性能索引_第10张图片

上图创建复合索引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会自动选择放弃索引,不用手动去处理,是其内部优化器做的。

如:
15、MySQL创建高性能索引_第11张图片
此时索引name就不生效,因为本身是字符串类型,而where查询是整型

15、MySQL创建高性能索引_第12张图片
把100加引号就可以使用索引


解:

答:遵循前缀原则,%不在前原则,要看查询条件(组合索引和复合索引是一回事儿),or前后都是索引才行,对于字符串索引要加双引号

你可能感兴趣的:(15、MySQL创建高性能索引)