导致全表扫描的情况
2017-03-13 21:47
176 查看
1.查询时没有设定查询条件。例如:select * from tablename;
2.查询条件中不要使用in操作符。如果是联系范围推荐可以是用between代替。
3.not in使用,not in不会走索引。
处理方式:用exists 或者外联结 + 判断为空代替
4.is null 或 is not null 会导致索引失效,引起全表扫描
5.查询条件中使用了不等于操作符(<>,!=)导致索引失效
处理方式:将不等于操作符换成or
6.or使用不当导致索引失效。例如:where column1 < '1' or column2 >'3' 只有column1和column2都使用了索引,索引才会有效,否则导致索引失败。
7.like使用不当。
解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like‘…%’,是会使用索引的;左模糊like‘%...’无法直接使用索引,但可以利用reverse
+ function index的形式,变化成like‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。
8.select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。
9.sql的where条件要绑定变量,比如where column=:1,不要写成where column=‘aaa’,这样会导致每次执行时都会重新分析,浪费CPU和内存资源。
2.查询条件中不要使用in操作符。如果是联系范围推荐可以是用between代替。
3.not in使用,not in不会走索引。
处理方式:用exists 或者外联结 + 判断为空代替
4.is null 或 is not null 会导致索引失效,引起全表扫描
5.查询条件中使用了不等于操作符(<>,!=)导致索引失效
处理方式:将不等于操作符换成or
6.or使用不当导致索引失效。例如:where column1 < '1' or column2 >'3' 只有column1和column2都使用了索引,索引才会有效,否则导致索引失败。
7.like使用不当。
解决办法:首先尽量避免模糊查询,如果因为业务需要一定要使用模糊查询,则至少保证不要使用全模糊查询,对于右模糊查询,即like‘…%’,是会使用索引的;左模糊like‘%...’无法直接使用索引,但可以利用reverse
+ function index的形式,变化成like‘…%’;全模糊是无法优化的,一定要的话考虑用搜索引擎。出于降低数据库服务器的负载考虑,尽可能地减少数据库模糊查询。
8.select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。
9.sql的where条件要绑定变量,比如where column=:1,不要写成where column=‘aaa’,这样会导致每次执行时都会重新分析,浪费CPU和内存资源。
相关文章推荐
- 不会使用索引,导致全表扫描情况
- 什么情况导致全表扫描,而不是用索引
- 什么情况导致全表扫描,而不是用索引 收藏
- 不会使用索引,导致全表扫描情况
- 什么情况导致全表扫描,而不是用索引
- 不会使用索引,导致全表扫描情况
- 不会使用索引,导致全表扫描情况
- 不会使用索引,导致全表扫描情况
- 不会使用索引,导致全表扫描情况
- 【翻译自mos文章】SYS_OP_C2C 导致的全表扫描(fts)/全索引扫描
- [导入]SQL语句在什么情况下使用全表扫描?
- SQL条件中“is null”谓词导致全表扫描问题优化
- 一次简单的性能优化诊断,聚簇因子过高导致全表扫描。
- 导致全表扫描的SQL
- SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法
- 一次简单的性能优化诊断,聚簇因子过高导致全表扫描。
- SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法
- SQL中WHERE变量IS NULL条件导致全表扫描问题的解决方法
- 【转】什么情况会导致Oracle数据库的全表扫描
- SQL中哪些情况会引起全表扫描