现在我们假设我们只有一台MySQL服务器,所有的select/update/insert/delete操作都是在这上面进行的,我们同时有三台Web服务器,通过DNS轮巡来访问,那么我们如何进行我们应用程序和SQL的优化。

1. Where条件
在查询中,WHERE条件也是一个比较重要的因素,尽量少并且是合理的where条件是很重要的,在写每一个where条件的时候都要仔细考虑,尽量在多个条件的时候,把会提取尽量少数据量的条件放在前面,这样就会减少后一个where条件的查询时间。
有时候一些where条件会导致索引无效,当使用了Mysql函数的时候,索引将无效,比如:select * from tbl1 where left(name, 4) = 'hylr',那么这时候索引无效,还有就是使用LIKE进行搜索匹配的时候,这样的语句索引是无效的:select * from tbl1 where name like '%xxx%',但是这样索引是有效的:select * from tbl1 where name like 'xxx%',所以谨慎的写你的SQL是很重要的。

2. 关联查询和子查询
数据库一个很重要的特点是关联查询,LEFT JOIN 和全关联,特别是多个表进行关联,因为每个关联表查询的时候,进行扫描的时候都是一个笛卡尔乘积的数量级,扫描数量很大,如果确实是需要进行关联操作,请给where或者on的条件进行索引。
关联操作也是可能交给应用去操作的,看数据量的大小,如果数据量不是非常大,比如10万条以下,那么就可以交给程序去处理(totododo提出笔误,特此修正),程序分别提取左右两个表的数据,然后进行循环的扫描处理,返回结果,这个过程同样非常耗费Web服务器的资源,那么就需要取决于你愿意把压力放在Web服务器上或者数据库服务器上了。
子查询是在mysql5中支持的功能,比如:select * from tbl1 where id in(select id from tbl1),那样效率是非常非常低,要尽量避免使用子查询,要是我,绝对不用,呵呵。
3.  一些耗费时间和资源的操作

SQL语句中一些浪费的操作,比如 DISTINCT、COUNT、GROUP BY、各种MySQL函数。这些操作都是比较耗资源的,同样能够起到统计的作用。如果不是十分必要,尽量不要使用distinct操作,就是提取唯一值,你完全可以把这个操作交给脚本程序去执行提取唯一值,减少MySQL的负担。group by 操作也是,确实需要分组的话,请谨慎的操作,如果是小批量的数据,可以考虑交给脚本程序去做。
至于MySQL的函数,估计很多常用,比如有人喜欢把截取字符串也交给MySQL去操作,或者时间转换操作,使用比较多的函数像 SUBSTR(), CONCAT(), DATE_FORMAT(), TO_DAYS(), MAX(), MIN(), MD5() 等等,这些操作完全可以交给脚本程序去做,减轻MySQL的负担。

4. 合理的建立索引
索引的提升速度的一个非常重要的手段,索引在对一些经常进行select操作,并且值比较唯一的字段是相当有效的,比如主键的id字段,唯一的名字name字段等等。
但是索引对于唯一值比较少的字段,比如性别gender字段,寥寥无几的类别字段等,意义不大,因为性别是50%的几率,索引几乎没有意义。对于update/delete/insert非常频繁的表,建立索引要慎重考虑,因为这些频繁的操作同样对于索引的维护工作量也是很大的,最后反而得不偿失,这个需要自己仔细考虑。索引同样不是越多越好,适当的索引会起到很关键的作用,不适当的索引,反而减低效率维护,增加维护索引的负担。

5. 监控sql执行效率
在select语句前面使用EXPLAIN字句能够查看当前这个select字句的执行情况,包括使用了什么操作、返回多少几率、对索引的使用情况如何等等,能够有效分析SQL语句的执行效率和合理程度。
另外使用MySQL中本身的慢查询日志:slow-log,同样能够记录查询中花费时间比较多的SQL语句,好对相应的语句进行优化和改写。
另外在MySQL终端下,使用show processlist命令能够有效的查看当前MySQL在进行的线程,包括线程的状态,是否锁表等等,可以实时的查看SQL执行情况,同时对一些锁表操作进行优化。

转载于:https://blog.51cto.com/study86/1332225

SQL的优化和注意事项相关推荐

  1. 【MySQL】MySQL开发注意事项与SQL性能优化步骤

    MySQL简介 地表最流行数据库 名副其实 什么是MySQL? 世界上应用最广泛且灵活的开源关系数据库 MySQL 是应用最广泛的开源关系数据库,是许多常见网站,应用程序和商业产品使用的主要关系数据存 ...

  2. SQL性能优化没有那么神秘

    经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做.很早的时候我在网上看到一位高手写的博客,介绍了SQL优化的问题,从这些内容来看,优化并不都是一 ...

  3. [SQL Server优化]善用系统监视器,确定系统瓶颈

    原文: [SQL Server优化]善用系统监视器,确定系统瓶颈 来自: http://hi.baidu.com/solorez/blog/item/f82038fa0e71b78d9e51468c. ...

  4. 关于SQL Server的若干注意事项

    关于SQL Server的若干注意事项 如果你正在负责一个基于SQL Server的项目,或者你刚刚接触SQL Server,你都有可能要面临一些数据库性能的问题,这篇文章会为你提供一些有用的指导(其 ...

  5. SQL性能优化(转)

    经常听说SQL Server最难的部分是性能优化,不禁让人感到优化这个工作很神秘,这种事情只有高手才能做.很早的时候我在网上看到一位高手写的博客,介绍了SQL优化的问题,从这些内容来看,优化并不都是一 ...

  6. Oracle的SQL性能优化

    ORACLE SQL性能优化注意事项: select  distinct 列, ...  from tab 1 jon tab2 on ()  where  ... group by ... havi ...

  7. 索引+sql练习优化

    目录 优势劣势 什么时候用索引 Expain性能分析 分析字段: 插入100w数据如何做到最快 1.创建函数(随机产生编号以及随机名字) 2.创建存储过程插入数据(利用上面两个函数得到随机编号以及名字 ...

  8. Sql性能优化之sql语句的写法

    Sql性能优化之sql语句的写法 一.引言 系统优化中一个很重要的方面就是SQL语句的优化.对于海量数据,劣质SQL语句和优质SQL语句之间的速度差别可以达到上百倍,可见对于一个系统不是简单地能实现其 ...

  9. 精华贴子整理之SQL性能优化

    SQL SERVER性能优化综述 近期因工作需要,希望比较全面的总结下SQL SERVER数据库性能优化相关的注意事项,在网上搜索了一下,发现很多文章,有的都列出了上百条,但是仔细看发现,有很多似是而 ...

最新文章

  1. 学用 TStringGrid [7] - ColWidths[0]、RowHeights[0]、GridLineWidth
  2. linux查看hdfs副本数量,文件副本数量问题,设置的dfs.replication没有生效
  3. Navicat使用教程:在Navicat Monitor for MySQL/MariaDB中配置实
  4. Python 基础语法(三)
  5. [Issue Fixed]-不能为虚拟电脑xxx打开一个新任务
  6. Dajngo-Xadmin 修改菜单摆放排序
  7. c mysql5.7_CentOS7下MySQL5.7的三种安装方式详解
  8. 试图将驱动程序添加到存储区_云存储——终于等到你,还好没放弃
  9. 电子工业出版社博文视点在上海第六届UPA中国用户可用性大会上
  10. git fatal: unable to access *** Timed out
  11. 什么是强制性3C认证?
  12. 谷歌电子邮件服务器,谷歌Gmail为什么会能一统美国电邮服务
  13. 我的权限控制(JBX + struts + hibernate + ORACLE)
  14. Java小游戏,防止物体跑出四周边界的算法
  15. 第2章第6节:使用Slider滑杆在指定的范围内选择一个数值 [SwiftUI快速入门到实战]
  16. PHP MYSQLi 过程式准备好语句
  17. 计算机学院姚茜,2019年东南大学计算机科学与工程学院硕士研究生拟录取名单公示...
  18. 微信小程序采坑四:下拉刷新不回弹
  19. 视角的本质能给我们带来什么?
  20. Shelve Silently - 静默搁置 (Git 功能)

热门文章

  1. Git『Everything up-to-date』问题解决
  2. ceph集群删除mds服务
  3. VC++ MFC中如何将应用程序的配置信息保存到注册表中(一)
  4. 各类型磁盘的IOPS一览表
  5. 六、CPU优化(4)NUMA架构
  6. linux系统增加swap分区
  7. js通过classname来获取元素
  8. 给GridView中的buttonField添加一个删除确认功能
  9. Hadoop YARN
  10. 从数组中取出n个元素的所有组合(递归实现)