美文网首页
15、MySQL创建高性能索引

15、MySQL创建高性能索引

作者: hello大象 | 来源:发表于2017-12-07 11:28 被阅读0次



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

    只扫描这一条就可以了,如果不创立索引则要扫描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加引号就可以使用索引

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

    相关文章

      网友评论

          本文标题:15、MySQL创建高性能索引

          本文链接:https://www.haomeiwen.com/subject/asgfixtx.html