- 浏览: 131426 次
- 性别:
- 来自: 深圳
文章分类
最新评论
总结一下项目中经常使用的MySQL SQL优化最佳实践
1.IN查询包含的值不应过多
建议最多不超过5个,虽然MySQL对于IN做了相应的优化——IN中的常量全部存储在一个数组里面,并对这个数组进行排好序。但是如果数值较多,产生的消耗也是比较大的。
对于in(1,2,3) 这样连续的数值,可以使用between或者使用连接来替换。
2. SELECT语句务必指明字段名称
3. 当只需要一条数据的时候,使用limit 1
这样可以使得EXPLAIN中的type列达到const类型
4. 如果排序字段没有用到索引,就尽量少排序
5. 如果限制条件中其他字段没有索引,尽量少用or
很多时候使用 union all 或者是union(必要的时候)的方式来代替“or”会得到更好的效果
6. 尽量用union all代替union
union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,加大资源消耗及延迟。 union all的前提条件是两个结果集没有重复数据。
7. 区分in和exists, not in和not exists
区分in和exists主要是造成了驱动顺序的改变,如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。所以IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。关于not in和not exists,推荐使用not exists,不仅仅是效率问题,not in可能存在逻辑问题。
1.IN查询包含的值不应过多
建议最多不超过5个,虽然MySQL对于IN做了相应的优化——IN中的常量全部存储在一个数组里面,并对这个数组进行排好序。但是如果数值较多,产生的消耗也是比较大的。
对于in(1,2,3) 这样连续的数值,可以使用between或者使用连接来替换。
2. SELECT语句务必指明字段名称
3. 当只需要一条数据的时候,使用limit 1
这样可以使得EXPLAIN中的type列达到const类型
4. 如果排序字段没有用到索引,就尽量少排序
5. 如果限制条件中其他字段没有索引,尽量少用or
很多时候使用 union all 或者是union(必要的时候)的方式来代替“or”会得到更好的效果
6. 尽量用union all代替union
union和union all的差异主要是前者需要将结果集合并后再进行唯一性过滤操作,这就会涉及到排序,增加大量的CPU运算,加大资源消耗及延迟。 union all的前提条件是两个结果集没有重复数据。
7. 区分in和exists, not in和not exists
区分in和exists主要是造成了驱动顺序的改变,如果是exists,那么以外层表为驱动表,先被访问,如果是IN,那么先执行子查询。所以IN适合于外表大而内表小的情况;EXISTS适合于外表小而内表大的情况。关于not in和not exists,推荐使用not exists,不仅仅是效率问题,not in可能存在逻辑问题。
发表评论
-
Threadlocals and memory leaks in J2EE
2020-03-03 01:10 227Threadlocals are used in J2EE a ... -
RabbitMQ调优系列2 为大量连接进行调整
2019-06-23 22:29 1034RabbitMQ调优系列2 为大量连接进行调整 Some ... -
RabbitMQ调优系列1 调整I/O线程线程池
2019-06-23 22:03 974RabbitMQ调优系列1 调整I/O线程线程池 Er ... -
MySQL分区表使用场景及特点介绍
2019-05-27 19:05 948MySQL分区表使用场景及特点介绍 本文旨在介绍MySQL分 ... -
MySQL基础优化
2019-03-24 22:22 297减少使用swap的概率 由参数 vm.swappiness 决 ... -
Hibernate中的持久化对象状态说明
2019-03-18 00:04 427Hibernate框架中为持久化的对象设计了三种状态,处于这三 ... -
redo log
2019-01-18 22:37 488redo log是关系型数据库的核心啊,保证了ACID里的D。 ... -
InnoDB 刷脏页的控制策略
2019-01-18 20:34 1333InnoDB 使用缓冲池(buffer pool)管理内存,缓 ... -
MySQL创建用户与授权方法
2018-12-20 23:10 356一, 创建用户: 命令:CREATE USER 'user ... -
MySQL开发之分页优化
2018-12-20 22:27 470一般刚开始学MySQL的时候,针对小数据量可以这样写 SEL ... -
MySQL参数详解之 Max_connect_errors
2018-12-20 22:00 496max_connect_errors参数是一个与MySQL服务 ... -
Java Web- Changes Between SOAP 1.1 and SOAP 1.2
2015-05-25 15:43 772SOAP Version 1.2 has a number o ... -
术语-揭开Socket
2013-09-27 11:37 883好文转自:http://www.cnblogs.com/goo ... -
术语-Frontend 与 backend
2013-09-16 10:20 1141Front-end and back-end are term ... -
HTTP状态代码含义与其解决方法
2012-11-29 14:04 962HTTP状态代码含义与其解决方法 转自:http://bugu ... -
微软知识库kb是什么?
2012-10-23 18:53 0您在搜索微软kb(微软知识库 knowledge base)和 ... -
Oracle 9i 、10G 编程艺术之深入数据库体系结构
2011-10-30 16:13 962第一章 [1.3.3 多版本] Oracle 能充分利用不 ... -
服务器内存UDIMM与RDIMM的区别
2011-09-26 10:12 1526Intel 5500系列至强CPU2009 ... -
如何查看Linux 服务器的负载信息
2011-09-11 10:38 939在Linux系统中,uptime、w、top等命令都会有系统平 ... -
如何查看Linux 服务器的负载信息
2011-09-11 10:37 2688在Linux系统中,uptime、w、top等命令都会有系统平 ...
相关推荐
Oracle&MySQLSQL;语法教程最佳实践,非常实用的教程。。。
此外,定期对索引进行优化和维护也是必要的。可以通过分析查询日志和执行计划来评估索引的使用情况,及时发现和处理潜在的性能问题。同时,定期重建或者重新组织索引,可以进一步提高索引的效率和性能。
MYSQL与SQL优化,自己编写MYSQL与SQL优化.ppt MYSQL与SQL优化.ppt
MySQL性能优化 SQL优化方法技巧
mysqlSQL语法.pdf
php mysqlsql 查询组件,
2、对查询进行优化,应尽量避免全表扫描,首先应考虑在where及orderby涉及的列上建立索引。 3、应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:...
主要介绍了MySql Sql 优化技巧分享,非常不错,具有参考借鉴价值,需要的朋友可以参考下
有天发现一个带inner join的sql 执行速度虽然不是很慢(0.1-0.2),但是没有达到理想速度。两个表关联,且关联的字段都是主键,查询的字段是索引。 sql如下: SELECT p_item_token.*, p_item.product_type ...
mysqlSQL语法[文].pdf
sql语句练习和疑问解析
MySQL高级特性字段约束-索引-视图-外键学习实践PDF文档;
java课设基于ssm人力人事管理系统源码+mysqlsql数据库脚本文件,该有的功能都有,适合java毕设课设,功能模块: 用户管理:包括登录、注册、用户信息修改等功能。 员工管理:实现员工的增加、删除、修改和查询等...
本篇文章是对MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍,需要的朋友参考下
存储过程和函数:编写和执行存储过程和函数。 用户权限管理:用户账户创建、权限分配和安全管理。 数据库备份与恢复:数据的备份策略和恢复方法。 适用人群 数据库初学者:对数据库概念和SQL语言感兴趣的新手。 Web...
资源名称:mysql sql语句大全资源截图: 资源太大,传百度网盘了,链接在附件中,有需要的同学自取。
MySQL数据库分区技术,解决多并发问题,详细描述分区流程及操作步骤
oracle Mysql相互转化的工具
mysqlSQL命令行,快速帮你了解mysql
此为Mysql数据库的安装教程,可以帮助你快速实现软件安装。Mysql的安装包请自行下载。