全表扫描.定义
需要从全表扫描说起.
在数据库中,对无索引的表进行查询一般称为全表扫描。
全表扫描是数据库服务器用来搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。
这种效率是有点低的,那么怎么提高查询速度呢?
索引.
旁白,这是一个LOL地图 + 一个雷达图的结合...
想象一下,LOL刚出来的时候,大家都是乱走位置,
根本没有打野,大家抓人全靠运气(如果那时候知道抓人)
全表扫描.结尾.何时有了索引还是会全表扫描
当我索引是摆设?
- 查询语句使用了"Like"
对于LIKE '%xyz%'(全模糊)这样的条件,是无法使用索引,
另外,由于匹配算法的关系,模糊查询的字段长度越大,模糊查询效率越低。
解决办法:
首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询.
对于右模糊查询,即LIKE 'xyz%',是会使用索引的.
左模糊LIKE '%xyz'无法直接使用索引,但可以利用reverse + function index 的形式,变化成LIKE 'xyz%',
全模糊是无法优化的,一定要的话考虑用搜索引擎.出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询.
- where 子句中使用!=或<>操作符
- where 子句中使用or 来连接条件
- in 和not in 也要慎用
- where 子句中对字段进行表达式操作
- where子句中对字段进行函数操作
全表扫描.适用场景
- ※ 表很小,索引可能就比表还大
- ※ 访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。
- ※ 相对于索引来说,表中的数据排列过于凌乱,表现出来就是索引的 clustering_factor 很大,导致索引的访问成本剧增。