• 会引起 sql语句全表扫描的几种情况(可能不全,欢迎补充)(转载)


    1.模糊查询(like)

    like ‘ a%’ 这种查询是可以使用索引的

    like'%a'   这种查询索引是会失效的

    所以尽量避免不要使用2个百分号一起查询。建议的办法是reverse+function index 的形式。

    2.查询中包含 is null的sql语句

    3.查询中包含不等于这些符号的,例如(   < >    !=  )建议改成or来实现同样的判断或者查询功能

    4.使用组合索引,如果查询条件中没有前导列

    5.or使用不当也会造成全表扫描,不要过多的使用or.

    原因:where子句中比较的两个条件,一个有索引,一个没索引,使用or则会引起全表扫描。例如:where A=1 or B=2,A上有索引,B上没索引,则比较B=2时会重新开始全表扫描。

    6.组合索引

    排序时应按照组合索引中各列的顺序进行排序,即使索引中只有一个列是要排序的,否则排序性能会比较差。例如:create index skip1 on emp5(job,empno,date);  select job,empno from emp5 where job=’manager’and empno=’10’ order by job,empno,date desc; 实际上只是查询出符合job=’manager’and empno=’10"条件的记录并按date降序排列,但是写成order by date desc性能较差。

    7.update 修改 少量字段的时候尽量不要使用这个

    8.对于多张大数据量(这里几百条就算大了)的表JOIN,要先分页再JOIN,否则逻辑读会很高,性能很差。

    9.select count(*) from table;这样不带任何条件的count会引起全表扫描,并且没有任何业务意义,是一定要杜绝的。

    10.sql的where条件要绑定变量,比如where column=1,不要写成where column=‘aaa’,这样会导致每次执行时都会重新分析,浪费CPU和内存资源。

    我的建议是 where column=$param

    对于学优化的可以从这里抓起哦,好好学下,欢迎大家补充哦

  • 相关阅读:
    8.5 exit函数进程控制
    8.2 进程标识
    8.6 wait和waitpid函数进程控制
    2.jpg
    8.3 fork函数进程控制
    8.4 vfork函数进程控制
    8.9 竞态条件
    8.8 wait3和wait4函数进程控制
    8.7 waitid函数进程控制
    Silverlight Tools 3.0中文正式版发布(附下载地址)
  • 原文地址:https://www.cnblogs.com/HoverM/p/9204767.html
Copyright © 2020-2023  润新知