mysql 优化代码_Mysql语句-优化代码
一:定义
mysql的性能优化包括: 索引优化,查询优化,查询缓存,服务器设置优化,操作系统和硬件优化,应用层面优化(web服务器,缓存)等等。这里主要是查询语句上面的优化,其它层面的优化技巧在此不做记录。
二:开销指标
执行时间 检查的行数 返回的行数
三:建立索引的几个准则
1、合理的建立索引能够加速数据读取效率,不合理的建立索引反而会拖慢数据库的响应速度。 2、索引越多,更新数据的速度越慢。
3、尽量在采用MyIsam作为引擎的时候使用索引(因为MySQL以BTree存储索引),而不是InnoDB。但MyISAM不支持Transcation。
4、当你的程序和数据库结构/SQL语句已经优化到无法优化的程度,而程序瓶颈并不能顺利解决,那就是应该考虑使用诸如memcached这样的分布式缓存系统的时候了。
5、习惯和强迫自己用EXPLAIN来分析你SQL语句的性能。
四:操作实例
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在条件选择的语句上合理的放置索引,eg: where 及 order by 涉及的列上建立索引,而不是在选择的栏位上放置索引,
eg:select id from table where id<5 order by id desc
2.应尽量避免在 where 子句中,a:使用!=或<>操作符,b:对字段进行 null 值判断,c:使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描。
b:select id from t where num is null
可以在num(数字)上设置默认值0,确保表中num列没有null值,然后这样查询:
select id from t where num=0
c: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
注:UNION 直接连接,取唯一值,口诀:去重且排序,效率低于union all
UNION ALL 直接连接,列出所有数据。口诀:不去重不排序
能用UNION ALL就不要用UNION
3.下面的查询也将导致全表扫描:
select id from t where name like '%abc%'
若要提高效率,可以考虑全文检索。目前只有MySQL5.7支持全文索引(支持中文)
可以修改为select id from t where name like 'abc%'
4.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
eg:用IN来替换OR,在in语句中能用exists语句代替的就用exists
5.如果在 where 子句中使用参数,也会导致全表扫描。因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num
6.应尽量避免在 where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
7.应尽量避免在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
copy的网址:1:https://www.cnblogs.com/wangning528/p/6388538.html
2:http://www.jb51.net/article/39221.htm
mysql 优化代码_Mysql语句-优化代码相关推荐
- mysql 语句优化实例_MySQL 语句优化实例
优化 LIMIT 分页 -- 执行耗时:1.379s SELECT * from vio_basic_domain_info LIMIT 1000000,10; 处理分页慢查询的方式一般有以下几种: ...
- mysql函数做条件_MySQL语句优化(三):避免条件字段做函数操作
今天跟各位分享一个生产环境慢查询的例子,是一个比较典型的"条件字段使用了函数导致无法走索引"的例子. 一.定位慢查询 首先发现慢查询告警,通过运维平台看到慢查询主要是下面这条:SE ...
- mysql 优化方法_Mysql的优化方法介绍
本篇文章给大家带来的内容是关于Mysql的优化方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.应用访问优化1).减少数据访问(Nosql作用) 2).返回更少数据 3). ...
- mysql or优化_MySQL 语句优化
官方文档放这里,有什么代码先到官方文档查询: MySQL 8.0 Reference Manual :: 8 Optimizationdev.mysql.com 优化涉及多个级别的配置,调整和测量性 ...
- MySQL数据库:SQL语句优化
数据库最常用的优化方式有:SQL语句和索引.数据库表结构.系统配置.硬件. 优化效果:SQL语句和索引 < 数据库表结构 < 系统配置 < 硬件,成本也是递增的. 优化方法 设计符合 ...
- mysql数据库优化命令_MySQL数据库优化总结
一个:MySQL标准数据库优化注意事项 1.数据库设计(表设计合理)三范式(规范的模式) 三范式包含: 第一范式:1NF是对属性的原子性的约束.要求属性具有原子性,不可再分解.(仅仅要是关系型数据库都 ...
- mysql性能优化之sql语句优化最强合集
2019独角兽企业重金招聘Python工程师标准>>> 当mysql单表记录数过大时,增删改查的性能都会急剧下降.系统优化中一个很重要的方面就是sql语句的优化.因此我们下边主要讨论 ...
- mysql数据库优化大全_MySQL数据库优化技巧大全
简介: MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进 ...
- mysql+性能优化+命令_MySQL性能优化
一.优化思路 数据查询慢,不代表 SQL 语句写法有问题. 首先,我们需要找到问题的源头才能"对症下药".用一张流程图展示 MySQL 优化的思路: 从图中可以清楚地看出,导致数据 ...
- mysql产品优化方案_mysql的优化方案
简介 在本文中,主要写一下自己所查阅和理解的mysql优化方案. 我的理解是数据库的优化对于我们'非专业'人员,mysql的优化也没那么复杂了,真的要玩转mysql的话,肯定得需要很多年的经验了. 参 ...
最新文章
- 13装饰器和内置函数
- vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法
- windows 启动某些文件的快捷方式 ”系统环境变量?“
- so调用so 编译 android,android-5分钟入门-CMake方式使用JNI(.so调用篇)
- Spring注解开发入门教程
- Python使用itchat获取微信好友
- linux kvm图标需要安装的软件,KVM 图形化安装
- 为什么我在实时编码时失败了?
- 常用的排序算法(java版)
- C语言输出大写金额,编程实现,输入一个人民币小写金额值,转化为大写金额值输出。先实现基本功能...
- Python使用MINIMAX实现自动吃豆人
- 一款批量修改AE模板的工具
- 查看网络连接的netstat命令
- 通俗易懂的理解:什么是数据埋点?
- 【leetcode】电话号码的字母组合
- 有趣又实用的软件,给生活增添趣味
- 删除末尾带.的文件夹
- 【JavaScript】实现微信发消息-解决方案
- ceph中monitor节点基本解释与图解
- K8S之pod生命周期
热门文章
- SpringBoot的搭建
- 网站平台架构演变史(四) - 水平拆分的查询
- Python2.7.3 学习——准备开发环境
- 批处理禁用U盘,光驱,用户添加到组,盘符添加权限
- java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,网页一直处于加载中,servlet+html+js+css项目难题解决
- davinci项目服务器无法,【工程管理】为达芬奇建一个项目管理服务器 多人协同调色...
- java我的世界1.6.2_我的世界1.6.2
- css3探测光圈_一款带光圈阴影的纯CSS3 Instagram图标
- vue-cli webpack配置注释
- [转]BAT 批处理脚本 教程