一:定义

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语句-优化代码相关推荐

  1. mysql 语句优化实例_MySQL 语句优化实例

    优化 LIMIT 分页 -- 执行耗时:1.379s SELECT * from vio_basic_domain_info LIMIT 1000000,10; 处理分页慢查询的方式一般有以下几种: ...

  2. mysql函数做条件_MySQL语句优化(三):避免条件字段做函数操作

    今天跟各位分享一个生产环境慢查询的例子,是一个比较典型的"条件字段使用了函数导致无法走索引"的例子. 一.定位慢查询 首先发现慢查询告警,通过运维平台看到慢查询主要是下面这条:SE ...

  3. mysql 优化方法_Mysql的优化方法介绍

    本篇文章给大家带来的内容是关于Mysql的优化方法介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 1.应用访问优化1).减少数据访问(Nosql作用) 2).返回更少数据 3). ...

  4. mysql or优化_MySQL 语句优化

    官方文档放这里,有什么代码先到官方文档查询: MySQL 8.0 Reference Manual :: 8 Optimization​dev.mysql.com 优化涉及多个级别的配置,调整和测量性 ...

  5. MySQL数据库:SQL语句优化

    数据库最常用的优化方式有:SQL语句和索引.数据库表结构.系统配置.硬件. 优化效果:SQL语句和索引 < 数据库表结构 < 系统配置 < 硬件,成本也是递增的. 优化方法 设计符合 ...

  6. mysql数据库优化命令_MySQL数据库优化总结

    一个:MySQL标准数据库优化注意事项 1.数据库设计(表设计合理)三范式(规范的模式) 三范式包含: 第一范式:1NF是对属性的原子性的约束.要求属性具有原子性,不可再分解.(仅仅要是关系型数据库都 ...

  7. mysql性能优化之sql语句优化最强合集

    2019独角兽企业重金招聘Python工程师标准>>> 当mysql单表记录数过大时,增删改查的性能都会急剧下降.系统优化中一个很重要的方面就是sql语句的优化.因此我们下边主要讨论 ...

  8. mysql数据库优化大全_MySQL数据库优化技巧大全

    简介: MySQL数据库优化技巧大全 MySQL优化三大方向 ① 优化MySQL所在服务器内核(此优化一般由运维人员完成). ② 对MySQL配置参数进行优化(my.cnf)此优化需要进行压力测试来进 ...

  9. mysql+性能优化+命令_MySQL性能优化

    一.优化思路 数据查询慢,不代表 SQL 语句写法有问题. 首先,我们需要找到问题的源头才能"对症下药".用一张流程图展示 MySQL 优化的思路: 从图中可以清楚地看出,导致数据 ...

  10. mysql产品优化方案_mysql的优化方案

    简介 在本文中,主要写一下自己所查阅和理解的mysql优化方案. 我的理解是数据库的优化对于我们'非专业'人员,mysql的优化也没那么复杂了,真的要玩转mysql的话,肯定得需要很多年的经验了. 参 ...

最新文章

  1. 13装饰器和内置函数
  2. vue 循环遍历list_vue使用map代替Aarry数组循环遍历的方法
  3. windows 启动某些文件的快捷方式 ”系统环境变量?“
  4. so调用so 编译 android,android-5分钟入门-CMake方式使用JNI(.so调用篇)
  5. Spring注解开发入门教程
  6. Python使用itchat获取微信好友
  7. linux kvm图标需要安装的软件,KVM 图形化安装
  8. 为什么我在实时编码时失败了?
  9. 常用的排序算法(java版)
  10. C语言输出大写金额,编程实现,输入一个人民币小写金额值,转化为大写金额值输出。先实现基本功能...
  11. Python使用MINIMAX实现自动吃豆人
  12. 一款批量修改AE模板的工具
  13. 查看网络连接的netstat命令
  14. 通俗易懂的理解:什么是数据埋点?
  15. 【leetcode】电话号码的字母组合
  16. 有趣又实用的软件,给生活增添趣味
  17. 删除末尾带.的文件夹
  18. 【JavaScript】实现微信发消息-解决方案
  19. ceph中monitor节点基本解释与图解
  20. K8S之pod生命周期

热门文章

  1. SpringBoot的搭建
  2. 网站平台架构演变史(四) - 水平拆分的查询
  3. Python2.7.3 学习——准备开发环境
  4. 批处理禁用U盘,光驱,用户添加到组,盘符添加权限
  5. java.lang.ClassNotFoundException: com.mysql.jdbc.Driver,网页一直处于加载中,servlet+html+js+css项目难题解决
  6. davinci项目服务器无法,【工程管理】为达芬奇建一个项目管理服务器 多人协同调色...
  7. java我的世界1.6.2_我的世界1.6.2
  8. css3探测光圈_一款带光圈阴影的纯CSS3 Instagram图标
  9. vue-cli webpack配置注释
  10. [转]BAT 批处理脚本 教程