mysql的优化措施,从sql优化做起
http://geeksblog.cc/2016/06/11/mysql-optimize/
优化sql的一般步骤
- 通过show status了解各种sql的执行频率
- 定位执行效率低的sql语句
- 通过explain分析效率低的sql
- 通过show profile分析sql ?
- 通过trace分析优化器如何选择执行计划
- 确定问题,采取措施优化
索引优化措施
mysql中使用索引的典型场景
- 匹配全值,条件所有列都在索引中而且是等值匹配
- 匹配值的范围查找,字段必须在索引中
- 匹配最左前缀,复合索引只会根据最左列进行查找
- 仅仅对索引进行查询,即查询的所有字段都在索引上
- 匹配列前缀,比如like ‘ABC%’,如果是like ‘%aaa’就不可以
- 如果列名是索引,使用column is null会使用索引
存在索引但不会使用索引的典型场景
- 以%开头的like查询不能使用b树索引
- 数据类型出现隐式转换不能使用索引
- 复合索引,查询条件不符合最左列原则
- 用or分割的条件,如果前面的条件有索引,而后面的条件没有索引
查看索引使用的情况
1
show status like 'Handler_read%';
如果Handler_read_rnd_next的值比较高,说明索引不正确或者查询没有使用到索引
有索引: mysql> select * from dd;
+----+
| a |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 9 |
| 10 |
| 11 |
| 12 |
| 13 |
+----+
13 rows in set (0.00 sec) mysql> show create table dd;
+-------+----------------------------------------
| Table | Create Table
+-------+----------------------------------------
| dd | CREATE TABLE `dd` (
`a` int(11) NOT NULL,
PRIMARY KEY (`a`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------
1 row in set (0.02 sec)
mysql> select * from dd where a=10;
+----+
| a |
+----+
| 10 |
+----+
1 row in set (0.00 sec) mysql> show status like 'Handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 0 |
| Handler_read_key | 1 | //增加的是这个值
| Handler_read_last | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 2 |
+-----------------------+-------+
7 rows in set (0.00 sec)
无索引: mysql> show create table q;
+-------+------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+------------------------------------------------------------------------------------+
| q | CREATE TABLE `q` (
`a` int(11) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------+
1 row in set (0.00 sec) mysql> select * from q where a=10;
+------+
| a |
+------+
| 10 |
+------+
1 row in set (0.00 sec) mysql> show status like 'Handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 1 |
| Handler_read_key | 1 |
| Handler_read_last | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 56 |
+-----------------------+-------+
7 rows in set (0.00 sec) mysql> select * from q where a=11;
+------+
| a |
+------+
| 11 |
+------+
1 row in set (0.00 sec) mysql> show status like 'Handler_read%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| Handler_read_first | 2 |
| Handler_read_key | 2 |
| Handler_read_last | 0 |
| Handler_read_next | 0 |
| Handler_read_prev | 0 |
| Handler_read_rnd | 0 |
| Handler_read_rnd_next | 70 |
+-----------------------+-------+
7 rows in set (0.01 sec)
简单实用的优化方法
- 定期检查表和分析表
分析表语法:1
analyze table 表名;
检查表语法:
1 |
check table 表名; |
- 定期优化表
- 对于字节大小不固定的字段,数据更新和删除会造成磁盘空间不释放,这时候就行优化表,可以整理磁盘碎片,提高性能
语法如下:1
optimize table user(表名);
- 对于字节大小不固定的字段,数据更新和删除会造成磁盘空间不释放,这时候就行优化表,可以整理磁盘碎片,提高性能
mysql的优化措施,从sql优化做起的更多相关文章
- MySQL性能优化(四):SQL优化
原文:MySQL性能优化(四):SQL优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ ...
- mysql实战优化之一:sql优化
1.选取最适用的字段属性 MySQL 可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快.因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得 ...
- Mysql性能优化一:SQL语句性能优化
这里总结了52条对sql的查询优化,下面详细来看看,希望能帮助到你 1, 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2,应尽量避免在 w ...
- Mysql查看优化后的SQL 语句
EXPLAIN EXTENDED 1先执行 EXPLAIN EXTENDED 2 show warnings: EXPLAIN EXTENDED SELECT * FROM `receivable ...
- MySQL数据库优化技术之SQL语句慢查询定位
通过show status命令了解各种SQL的执行频率 MySQL客户端连接成功后,通过使用show [session|global] status 命令可以提供服务器状态信息: 其中的session ...
- 浅谈mysql配置优化和sql语句优化【转】
做优化,我在这里引用淘宝系统分析师蒋江伟的一句话:只有勇于承担,才能让人有勇气,有承担自己的错误的勇气.有承担错误的勇气,就有去做事得勇气.无论做什么事,只要是对的,就要去做,勇敢去做.出了错误,承担 ...
- mysql 优化(包含sql语句的书写)
http://blog.chinaunix.net/uid-11640640-id-3426908.html mysql性能优化-慢查询分析.优化索引和配置 2012-11-30 15:18:42 ...
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...
- 二十种实战调优MySQL性能优化的经验
二十种实战调优MySQL性能优化的经验 发布时间:2012 年 2 月 15 日 发布者: OurMySQL 来源:web大本营 才被阅读:3,354 次 消灭0评论 本文将为大家介 ...
随机推荐
- 在ios开发中有多少常用的加密解密方式(备用)
最常用的是MD5和base64编码,还有DES 3DES AES加密 ios怎么实现RAS加密解密 最近几天折腾了一下如何在iOS上使用RSA来加密.iOS上并没有直接的RSA加密API.但是iOS提 ...
- uva 812 Trade on Verweggistan
题意: 给w个货架, 每个货架上有bi个货物, 每次只能拿最上面的货物, 每个货物有个价值, 所有货物的售价均为10. 问:能获得的最大利润, 以及能获得这个利润需要多少个货物. (有多种组合时只需输 ...
- Google java编程技术规范
不遵循规范的程序猿,不是好的coder. 学习java有一段时间了,一直想找java编程技术规范来学习一下,幸而网络资源丰富,各路玩家乐于分享,省去了好多麻烦,姑且算站在网友的肩上,砥砺前行. /** ...
- MySQL安装(以程序的方式启动)zip版
电脑环境 win10 64位 企业版 1.解压zip文件到某路径下. 2.复制目录下的my-default.ini 改名字(my.ini) 3.打开my.ini [mysqld]下面加上charact ...
- csu 10月 月赛 I 题 The Contest
Description 殷犇有很多队员.他们都认为自己是最强的,于是,一场比赛开始了~ 于是安叔主办了一场比赛,比赛有n个题目,每个题目都有一个价值Pi和相对能力消耗Wi,但是有些题目因为太坑不能同时 ...
- 一周一话题之四(JavaScript、Dom、jQuery全面复习总结<jQuery篇>)
-->目录导航 一. 初探Jquery 1. 介绍 2. 基础 二. Jquery操作 1. jQuery页面加载 2. 选择器 3. 操作Dom 三. Jquery进阶 1. 隐式迭代与链式编 ...
- 《转》SQL Server 2008 数据维护实务
SQL Server 2008 数据维护实务 http://blog.csdn.net/os005/article/details/7739553 http://www.cnblogs.com/xun ...
- 快速搭建Web服务器软件PHP+Apache+MySQL
搭建网站或者博客,需要一个合适的 Web 服务器.除了如下能在购买的虚拟空间上进行操作外,我们也可以在自己的电脑上搞定,因为可以用来方便快捷地测试网站或者博客主题,无论是 Wordpress.Joom ...
- ANDROID_MARS学习笔记_S02_012_ANIMATION_利用AnimationListener在动画结束时删除或添加组件
一.代码 1.xml(1)activity_main.xml <?xml version="1.0" encoding="utf-8"?> < ...
- 【Xamarin挖墙脚系列:使用Xamarin进行Hybrid应用开发】
原文:[Xamarin挖墙脚系列:使用Xamarin进行Hybrid应用开发] 官方地址:https://developer.xamarin.com/guides/cross-platform/adv ...