当前位置:  数据库>mysql

浅谈MySQL中优化sql语句查询常用的30种方法

    来源: 互联网  发布时间:2014-10-11

    本文导语:  1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描。 3.应尽量避免在 where 子句中对字段进行 nul...

1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。

2.应尽量避免在 where 子句中使用!=或操作符,否则将引擎放弃使用索引而进行全表扫描。

3.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0

4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20

5.下面的查询也将导致全表扫描:
select id from t where name like '%abc%'
若要提高效率,可以考虑全文检索。

6.in 和 not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用 between 就不要用 in 了:
select id from t where num between 1 and 3

7.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num

8.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2

9.应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where substring(name,1,3)='abc'--name以abc开头的id
select id from t where datediff(day,createdate,'2005-11-30')=0--'2005-11-30'生成的id
应改为:
select id from t where name like 'abc%'
select id from t where createdate>='2005-11-30' and createdate

    
 
 

您可能感兴趣的文章:

  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • mysql 里面的sql语句的连接字符是什么?急用!
  • Mysql增加主键或者更改表的列为主键的sql语句
  • MYSQL速度慢的问题 记录数据库语句
  • Mysql下在某一列后即表的某一位置添加新列的sql语句
  • 允许远程用户访问mysql服务sql语句
  • mysql update语句的用法详解
  • mysql自定义排序顺序语句
  • mysql查询语句通过limit来限制查询的行数
  • mysql快速添加百万条记录的语句
  • mysql与mssql的md5加密语句
  • mysql通过查看跟踪日志跟踪执行的sql语句
  • mysql 动态执行存储过程语句
  • mysql 前几条记录语句之(limit)
  • MySQL 一次执行多条语句的实现及常见问题
  • MYSQL修改所有表的存储引擎格式语句
  • mysql 获取当天发布的信息的语句
  • mysql中将null值转换为0的语句
  • MySql获取某个字段存在于哪个表的sql语句
  • Mysql 取字段值逗号第一个数据的查询语句
  • MySQL 存储过程中执行动态SQL语句的方法
  • mysql常用命令大全 mysql常用命令总结
  • mysql截取函数常用方法使用说明
  • 5个常用的MySQL数据库管理工具详细介绍
  • mysql cmd常用命令
  • MySQL数据库管理常用命令小结
  • mysql建表常用sql语句个人经验分享
  • MySQL 一次执行多条语句的实现及常见问题 iis7站长之家
  • MySQL数据库维护中监控所用到的常用命令
  • Php连接及读取和写入mysql数据库的常用代码
  • MySQL数据库备份和还原的常用命令小结
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • mysql中字符串和时间互相转换的方法(自动转换及DATE_FORMAT函数)
  • mysql修改用户密码的方法和mysql忘记密码的解决方法
  • linux mysql登陆出错 mysql升级方法
  • MySql报错Table mysql.plugin doesn’t exist的解决方法
  • mysql启动错误之mysql启动报1067错误解决方法
  • php连接不上mysql但mysql命令行操作正常的解决方法
  • MySQL降权运行之MySQL以Guests帐户启动设置方法
  • mysql修改密码的三方法和忘记root密码的解决方法
  • mysql解决远程不能访问的二种方法
  • 强制修改mysql的root密码的六种方法分享(mysql忘记密码)
  • 修改mysql密码与忘记mysql密码的处理方法
  • linux忘记mysql密码处理方法
  • mysql服务无法启动报错误1067解决方法(mysql启动错误1067 )
  • MYSQL不能从远程连接的一个解决方法(s not allowed to connect to this MySQL server)
  • mysql Master-Master-Slaves有谁会么?求教linux下mysql Master-Master-Slaves配置方法
  • mysql中文排序注意事项与实现方法
  • mysql 查看版本的方法图文演示
  • mysql忘记密码的解决方法
  • mysql 提示INNODB错误的解决方法
  • 免安转MySQL服务的启动与停止方法
  • windows7下启动mysql服务出现服务名无效的原因及解决方法
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • Mysql查询错误:ERROR:no query specified原因
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • MySQL Workbench的下载安装与使用教程
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3