美文网首页
SQL优化经验积累

SQL优化经验积累

作者: 一只弹窗仔 | 来源:发表于2020-05-09 12:01 被阅读0次

    1.条件字段选择性弱时不走索引
    原因: mysql在条件字段选择性弱,查出的结果集较大,不走索引;
    比如,一张表内有1W条数据,某个字段为0的数据有9999条,为1的只有1条。这是sql筛选条件查询这个字段为0的数据,此时sql不会走索引。原因是9999条数据相比于1W条数据近乎于全表扫描,如果走索引效率反而不如全表扫描高。
    解决办法 尽量避免条件字段选择性弱的查询,如果多个条件中的某个条件是这种情况且不得不用时,也不影响,比如查询某些条件下未删除的数据,且这张表内被删除数据非常少时。不用强求走索引。
    往来单位查询时:根据来源字段建索引,1W条数据时,客户档案来源9K,其他来源1K,用客户档案的值当来源值查询时,不走索引
    2.隐式转换
    字段值是字符型,入参值非字符型,会进行隐式转换,查询慢,使用concat函数转成字符型
    3.like查询索引失效
    全模糊和左模糊不走索引,右模糊走索引。当左模糊时使用方向索引
    a.like %code 索引失效,使用全表扫描。但可以通过翻转函数+like前模糊查询+建立翻转函数索引=走翻转函数索引,不走全表扫描。如where reverse(code) like reverse('%code')
    b.like code% 索引有效。
    c.like %code% 索引失效,也无法使用反向索引。

    全模糊使用like,索引失效,如果可能可以使用覆盖索引。无法使用覆盖索引时,可以使用函数locate,position等,字段是否包含某字符。大数据量情况下,查询性能locate>position>like

    相关文章

      网友评论

          本文标题:SQL优化经验积累

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