mysql sql优化及注意事项

  • sql优化分析

通过slow_log等方式可以捕获慢查询sql,然后就是减少其对io和cpu的使用(不合理的索引、不必要的数据访问和排序)
当我们面对具体的sql时,首先查看其执行计划
A.看其是否使用索引
B.查看其查询的记录数
C.确定索引的代价是否过高
D.是否可以使用复合索引
E.是否有“using temporary”
F.是否有“using filesort”

  • 创建高效索引

mysql的innodb有自己特殊的聚集索引(数据是按聚集索引的顺序存储的并和索引存储在一起),索引访问效率较高,次
要索引是通过先找到pk聚集索引,然后才能找到数据。
单列索引
单列索引比较简单,就是对单个列创建的索引,主键索引最好选择int类型,提高性能。
复合索引
复合索引是多列组合而成的索引,过滤效果越好的越放在前面,尽量通过索引完成过滤,回表只是取出额外的字段,当然如果
不需要回表,只扫描索引就可以获取所需数据最好了

  • sql写法注意事项

1)禁止3表以上的join
2)避免"select *"和排序功能共同使用
3)用jion替换子查询
4)用union all替换union
5)避免数据类型的转换,同数据类型比较
6)避免排序(通过索引或减少排序记录数)
7)对数据尽早过滤(复合索引过滤性更好的字段放的更靠前;尽量加少最后join结果集的数量)
8)把大sql拆分为多小sql
9)如果只是分组,用”group by a1 order by null“替换“group by a1”去除排序
10)禁止索引null列
11)字符例是否是前缀索引

转自:http://blog.csdn.net/wyzxg/article/details/7598964

时间: 2024-12-12 13:48:57

mysql sql优化及注意事项的相关文章

mysql sql优化

前言 有人反馈之前几篇文章过于理论缺少实际操作细节.这篇文章就多一些可操作性的内容吧. 注:这篇文章是以 MySQL 为背景,非常多内容同一时候适用于其它关系型数据库,须要有一些索引知识为基础. 优化目标 1.降低 IO 次数 IO永远是数据库最easy瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,降低 IO 次数是 SQL 优化中须要第一优先考虑.当然,也是收效最明显的优化手段. 2.减少 CPU 计算 除了 IO 瓶颈之外,SQL优化中须

18.Mysql SQL优化

18.SQL优化18.1 优化SQL语句的一般步骤 18.1.1 通过show status命令了解各种SQL的执行频率show [session|global] status; -- 查看服务器状态信息show session status; -- 查看session(当前连接)级别的服务器状态信息,默认session级别show global status; -- 查看global(数据库启动至今)级别的服务器状态信息show status like 'Com_%'; -- 查看当前sess

Mysql——SQL优化-统计某种类型的个数

有时我们想统计某种类型有多少个,会用这个SQL.全表扫描之余,还要filesort,耗时1.34秒. mysql> select country,count(*) from t1 group by country; +---------+----------+ | country | count(*) | +---------+----------+ | NULL | 32 | | africa | 524288 | | america | 524288 | | china | 524288 |

mysql sql优化之expain

explain显示了mysql如何使用索引来处理select语句以及连接表.可以帮助选择更好的索引和写出更优化的查询语句. 1. id SELECT识别符.这是SELECT查询序列号.查询序号即为sql语句执行的顺序 2.select_type select类型,它有以下几种值 2.1 simple 它表示简单的select,没有union和子查询 2.2 primary 最外面的select,在有子查询的语句中,最外面的select查询就是primary,上图中就是这样 2.3 union  

(MYSQL)SQL优化工具 - SQLAdvisor 安装使用详解

一.SQLAdvisor简介 SQLAdvisor是由美团点评公司技术工程部DBA团队(北京)开发维护的一个分析SQL给出索引优化建议的工具.它基于MySQL原生态词法解析,结合分析SQL中的where条件.聚合条件.多表Join关系 给出索引优化建议.目前SQLAdvisor在美团点评广泛应用,包括美团支付.酒店旅游.外卖.团购等产品线,公司内部对SQLAdvisor的开发全面转到github上,开源和内部使用保持一致. 二.SQLAdvisor安装 1.拉取最新代码 git clone ht

MySQL SQL优化之in与range查询

本文来自:http://hidba.ga/2014/09/24/in-and-range/ 首先我们来说下in()这种方式的查询.在<高性能MySQL>里面提及用in这种方式可以有效的替代一定的range查询,提升查询效率,因为在一条索引里面,range字段后面的部分是不生效的.使用in这种方式其实MySQL优化器是转化成了n*m种组合方式来进行查询,最终将返回值合并,有点类似union但是更高效.同时它存在这一些问题: 老版本的MySQL在IN()组合条件过多的时候会发生很多问题.查询优化可

MySQL SQL优化之‘%’

设计索引的主要目的就是帮助我们快速获取查询结果,而以%开头的like查询则不能够使用B-Tree索引.考虑到innodb的表都是聚簇表(类似于oracle中的索引组织表),且二级索引叶节点中记录的结构为(索引字段->主键字段),我们可以通过改写sql(mysql优化器比较笨,需要给它足够的提示)采取一种轻量级的方式代替全表扫:使用索引全扫描找到主键,再根据主键回表获取数据的方法.这种方式的速度优势在单行记录数据量较大.表中记录较多的情况下体现的尤为明显,因为此时索引全扫描带来的IO开销相对于全表

SQL优化及注意事项

1. 把数据.日志.索引放到不同的I/O设备上,增加读取速度.数据量(尺寸)越大,提高I/O越重要. 2. 纵向.横向分割表,减少表的尺寸,如:可以把大数据量的字段拆分表. 3. 根据查询条件,建立索引,优化索引.优化访问方式,限制结果集的数据量.注意填充因子要适当(最好是使用默认值0).索引应该尽量小,尽量使用字节数小的列建索引,不要对有限的几个值的列建单一索引. 4. 用OR的字句可以分解成多个查询,并且通过UNION链接多个查询.它们的速度只与是否使用索引有关,如果查询需要用到联合索引,用

MySQL SQL优化之字符串索引隐式转换

之前有用户很不解:SQL语句非常简单,就是select * from test_1 where user_id=1 这种类型,而且user_id上已经建立索引了,怎么还是查询很慢? test_1的表结构: CREATE TABLE `test_1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_id` varchar(30) NOT NULL, `name` varchar(30) DEFAULT NULL, PRIMARY KEY (`id`),