zoukankan      html  css  js  c++  java
  • 数据库.全表扫描

    全表扫描.定义

    需要从全表扫描说起.

    在数据库中,对无索引的表进行查询一般称为全表扫描。
    全表扫描是数据库服务器用来搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。

    这种效率是有点低的,那么怎么提高查询速度呢?
    索引.

    146ff0321f1e272453cc19b063b24763.png
    旁白,这是一个LOL地图 + 一个雷达图的结合...

    想象一下,LOL刚出来的时候,大家都是乱走位置,
    根本没有打野,大家抓人全靠运气(如果那时候知道抓人)

    全表扫描.结尾.何时有了索引还是会全表扫描

    当我索引是摆设?

    • 查询语句使用了"Like"
      对于LIKE '%xyz%'(全模糊)这样的条件,是无法使用索引,
      另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。

    解决办法:
    首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询.
    对于右模糊查询,即LIKE 'xyz%',是会使用索引的.
    左模糊LIKE '%xyz'无法直接使用索引,但可以利用reverse + function index 的形式,变化成LIKE 'xyz%',
    全模糊是无法优化的,一定要的话考虑用搜索引擎.出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询.

    • where 子句中使用!=或<>操作符
    • where 子句中使用or 来连接条件
    • in 和not in 也要慎用
    • where 子句中对字段进行表达式操作
    • where子句中对字段进行函数操作

    全表扫描.适用场景

    • ※ 表很小,索引可能就比表还大
    • ※ 访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。
    • ※ 相对于索引来说,表中的数据排列过于凌乱,表现出来就是索引的 clustering_factor 很大,导致索引的访问成本剧增。
  • 相关阅读:
    图解SQL的Join(转)
    MySQ数据表设计
    关于数据库DML、DDL、DCL区别
    SQL多表连接查询
    Xcode报错Expected selector for Objective-C and Expected method body
    Mac上安装使用MYSQL以及Navicat数据库管理和PHP服务器配置
    更换app开发者账号
    Mac 下的 C++ 开发环境
    spring-retry 重试机制
    Ribbon的主要组件与工作流程
  • 原文地址:https://www.cnblogs.com/love-zf/p/13556536.html
Copyright © 2011-2022 走看看