MySQL之SQL语句的优化

仅供自己学习

结论写在前面:

1、尽量避免进行全表扫描,可以给where和order by涉及的列上建立索引

2、尽量在where子句中使用 !=或<>操作符,因为这样会导致引擎放弃索引而进行全表扫描

3、尽量避免在where子句中对字段进行null的判断(如:select id from t where age is null )

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

5、尽量避免在like查询中使用2个%来查询,否则进行全表扫描(如:select id from t where name like ‘%abc%‘ )

6、尽量避免在where子句中使用in和not in来查询,否则进行全表扫描(如:select id from t where num in(1,2,3) ,可以使用between:select id from t where num between 1 and 3 )

7、尽量避免在 where 子句中对字段进行表达式操作,否则进行全表扫描(如:select id from t where num/2=100 ,可以:select id from t where num=100*2 

8、尽量避免在where子句中对字段进行函数操作,否则进行全表扫描

9、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

10、很多时候用 exists 代替 in 是一个好的选择(如: select num from a where num in(select num from b) ,可以替换:select num from a where exists(select 1 from b where num=a.num) )

11、任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 

原文地址:https://www.cnblogs.com/chenhaoyu/p/8855529.html

时间: 2024-10-19 06:40:33

MySQL之SQL语句的优化的相关文章

MySQL中SQL语句常见优化策略

1.避免全表扫描对查询进行优化,应尽量避免全表扫描,首先应考虑在where 及order by 涉及的列上建立索引. 2.避免判断null 值应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num 上设置默认值0,确保表中num 列没有null 值,然后这样查询: select id from t where num=0 3.避免不等值判断应尽量避免在where

MySQL常用SQL语句优化

SQL语句写得不严谨或者不适当,没有正确的使用上索引,会带来很严重的性能问题,这时DBA们又要来收拾这些烂滩子了,所以SQL语句的优化,在日常工作中,是占很重要的一部份,当然还有比如OS优化,硬件优化,MySQL Server优化,数据类型优化,应用层优化.我们进行MySQL的一些相关优化进行探讨. 1.优化数据插入: DISABLE KEYS和ENABLE KEYS用来关闭或者打开MyISAM表非唯一索引的更新,当用load命令导入数据的时候,适当的设置可以提高导入的速度.只用于MyISAM存

MySQL数据库sql语句的一些简单优化

1.查询条件的先后顺序 有多个查询条件时,要把效率高能更精确筛选记录的条件放在后边.因为MySQL解析sql语句是从后往前的(不知是否准确). 例: select a.*,b.* from UsrInf a,OrgInf b where LogNam='njnydx9' and b.OrgId=a.blnorg SQL语句从后往前解析,把LogNam='njnydx9'换到后边,避免了更多结果集的连接,提高了执行效率 2.in的效率问题 看网上都说in相当于多个条件的or.实际测试后发现in的执

《Effective MySQL之SQL语句最优化》读书笔记——乱七八糟系列(给自己看)

该书区别于诸如<MySQL技术内幕——InnoDB存储引擎>等书的一大特色是该书主要讲的是MySQL数据库中的索引技术,并分别讲了InnoDB.MyISAM.Memory三个存储引擎.其中重点当然是InnoDB.该笔记记得是乱七八糟,只适合自己看,记此笔记也是为了以后自己快速查阅回忆看这本书的内容,看起来会有断章取义的可能. 识别性能的问题:show full processlist 索引的用法: 优化数据访问 保持数据的完整性(主要通过外键技术) 表连接优化 结果排序 聚合操作 唯一键可以包

Effective MySQL之SQL语句最优化

推荐本SQL优化的书<Effective MySQL之SQL语句最优化>. 主要讲解:如何去分析SQL的性能.索引的原理.如何创建合适的索引.如何去分析线上系统的性能瓶颈. 另外还介绍了几个辅助工具: mysqldumpslow 来分析慢查询日志: Google开源的mysql-slow-query-log-parser 分析慢查询日志: 应用程序中使用MySQL Proxy来收集SQL语句.QEP.查询执行时间: 开源Maatkit检查数据库中的重复索引: Google的MySQL补丁,引入

mysql数据库sql语句调优 、

mysql数据库sql语句调优 . 索引设计原则: 索引列一般为where子句中的列或连接字句中的列 尽量不对基数小的列做索引,如性别列 尽可能使用短索引:如果对字符列索引尽量指定最小长度. (short Keys are better,Integer best) create index cityname on city(city(10)); 复合索引前缀特性,索引的顺序很重要. key(a,b,c)联合索引: 可以走索引的组合:key(a),key(a,b ),key(a,b,c) 下列索引

SQL语句常见优化十大案例

1.慢SQL消耗了70%~90%的数据库CPU资源: 2.SQL语句独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低:3.SQL语句可以有不同的写法: 下面是我总结的一些SQL常见的优化方法,每个案例都简单易懂,在开发过程中可以作为参考: 1.不使用子查询例:SELECT * FROM t1 WHERE id (SELECT id FROM t2 WHERE name='hechunyang');子查询在MySQL5.5版本里,内部执行计划器是这样执

关于sql语句的优化

最近在做mysql的数据库优化以及对sql语句优化的指导,写了一点文档,这个大家共勉一下! 数据库参数进行优化所获得的性能提升全部加起来只占数据库应用系统性能提升的40%左右,其余60%的系统性能提升全部来自对应用程序的优化.许多优化专家甚至认为对应用程序的优化可以得到80%的系统性能提升.因此可以肯定,通过优化应用程序来对数据库系统进行优化能获得更大的收益. 通常可分为两个方面: SQL语句的优化和数据库性能调优.应用程序对数据库的操作最终要表现为SQL语句对数据库的操作.而数据库性能调优是结

谈谈SQL 语句的优化技术

在SQL server 的性能优化过程中,TSQL的语句优化是很重要的一环.当您使用各种手段找出系统最需要优化的语句后,应该如何对该语句进行优化呢?下面列出一些TSQL 语句优化的常见技巧. 1.     语句的执行计划分析 首先要对该语句的执行计划(execution plan)进行分析,找出语句运行慢的原因.比如说, <>在检查执行计划是否包含table scan /index scan等昂贵的操作? <>对table, worktable是否进行了大量的逻辑读? <&g