- 浏览: 50308 次
- 性别:
文章分类
- 全部博客 (103)
- 一致性哈希算法 (1)
- 云计算 (2)
- Cassandra学习 (2)
- Java网络通信与笔记 (14)
- ZooKeeper学习 (1)
- HBase学习 (1)
- Sqoop学习 (1)
- Java网页开发之 (2)
- Java网络通信框架 (5)
- (memcached)分布式内存对象缓存系统 (1)
- Redis学习 (5)
- Shell学习 (14)
- Linux学习 (10)
- MySQL优化 (17)
- C++ (7)
- HTML5 (5)
- Android学习 (5)
- 网络 (2)
- Node.js (1)
- D3.js (1)
- R语言学习 (3)
- Spark (1)
- CAN协议 (2)
- 解决方案 (0)
最新评论
通过show status和应用特点了解各种SQL的执行频率
通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得。SHOW STATUS可以根据需要显示session级别的统计结果和global级别的统计结果。
以下几个参数对Myisam和Innodb存储引擎都计数:
Com_select 执行select操作的次数,一次查询只累加1;
Com_insert 执行insert操作的次数,对于批量插入的insert操作,只累加一次;
Com_update 执行update操作的次数;
Com_delete 执行delete操作的次数。
以下几个参数是针对Innodb存储引擎计数的,累加的算法也略有不同:
Innodb_rows_read select查询返回的行数;
Innodb_rows_inserted执行Insert操作插入的行数;
Innodb_rows_updated 执行update操作更新的行数;
Innodb_rows_deleted 执行delete操作删除的行数。
通过以上几个参数,可以很容易的了解当前数据库的应用是以插入更新为主还是以查询操作为主,以及各种类型的SQL大致的执行比例是多少。对于更新操作的计数,是对执行次数的计数,不论提交还是回滚都会累加。
对于事务型的应用,通过Com_commit和Com_rollback可以了解事务提交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题。
此外,以下几个参数便于我们了解数据库的基本情况:
Connections 试图连接Mysql服务器的次数
Uptime 服务器工作时间
Slow_queries 慢查询的次数
定位执行效率较低的SQL语句
可以通过以下两种方式定位执行效率较低的SQL语句:
可以通过慢查询日志定位那些执行效率较低的sql语句,用--log-slow-queries[=file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件。可以链接到管理维护中的相关章节。
慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态,是否锁表等等,可以实时的查看SQL执行情况,同时对一些锁表操作进行优化。
通过EXPLAIN分析低效SQL的执行计划
通过以上步骤查询到效率低的SQL后,我们可以通过explain或者desc 获取MySQL如何执行SELECT语句的信息,包括select语句执行过程表如何连接和连接的次序。
explain可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。
mysql> explain select sum(moneys) from sales a,companys b where a.company_id = b.id and a.year = 2006;
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
| select_type | table | type | possible_keys| key | key_len | rows | Extra |
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
| SIMPLE | b | index | PRIMARY | PRIMARY | 4 | 1 | Using index |
| SIMPLE | a | ALL | NULL | NULL | NULL | 12 | Using where |
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
2 rows in set (0.02 sec)
说明:
select_type:select 类型
table:输出结果集的表
type:表示表的连接类型
①当表中仅有一行是type的值为system是最佳的连接类型;
②当select操作中使用索引进行表连接时type的值为ref;
③当select的表连接没有使用索引时,经常会看到type的值为ALL,表示对该表进行了全表扫描,这时需要考虑通过创建索引来提高表连接的效率。
possible_keys:表示查询时,可以使用的索引列.
key:表示使用的索引
key_len:索引长度
rows:扫描范围
Extra:执行情况的说明和描述
确定问题,并采取相应的优化措施
经过以上步骤,基本可以确认问题出现的原因,可以根据情况采取相应的措施,进行优化提高执行的效率。
例如上面的例子,我们确认是对a表的全表扫描导致效率的不理想,我们对a表的year字段创建了索引,查询需要扫描的行数明显较少。
mysql> explain select sum(moneys) from sales a,companys b where a.company_id = b.id and a.year = 2006;
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
| select_type | table | type | possible_keys| key | key_len | rows | Extra |
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
| SIMPLE | b | index | PRIMARY | PRIMARY | 4 | 1 | Using index |
| SIMPLE | a | ref | year | year | 4 | 3 | Using where |
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
2 rows in set (0.02 sec)
通过SHOW STATUS可以提供服务器状态信息,也可以使用mysqladmin extended-status命令获得。SHOW STATUS可以根据需要显示session级别的统计结果和global级别的统计结果。
以下几个参数对Myisam和Innodb存储引擎都计数:
Com_select 执行select操作的次数,一次查询只累加1;
Com_insert 执行insert操作的次数,对于批量插入的insert操作,只累加一次;
Com_update 执行update操作的次数;
Com_delete 执行delete操作的次数。
以下几个参数是针对Innodb存储引擎计数的,累加的算法也略有不同:
Innodb_rows_read select查询返回的行数;
Innodb_rows_inserted执行Insert操作插入的行数;
Innodb_rows_updated 执行update操作更新的行数;
Innodb_rows_deleted 执行delete操作删除的行数。
通过以上几个参数,可以很容易的了解当前数据库的应用是以插入更新为主还是以查询操作为主,以及各种类型的SQL大致的执行比例是多少。对于更新操作的计数,是对执行次数的计数,不论提交还是回滚都会累加。
对于事务型的应用,通过Com_commit和Com_rollback可以了解事务提交和回滚的情况,对于回滚操作非常频繁的数据库,可能意味着应用编写存在问题。
此外,以下几个参数便于我们了解数据库的基本情况:
Connections 试图连接Mysql服务器的次数
Uptime 服务器工作时间
Slow_queries 慢查询的次数
定位执行效率较低的SQL语句
可以通过以下两种方式定位执行效率较低的SQL语句:
可以通过慢查询日志定位那些执行效率较低的sql语句,用--log-slow-queries[=file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件。可以链接到管理维护中的相关章节。
慢查询日志在查询结束以后才纪录,所以在应用反映执行效率出现问题的时候查询慢查询日志并不能定位问题,可以使用show processlist命令查看当前MySQL在进行的线程,包括线程的状态,是否锁表等等,可以实时的查看SQL执行情况,同时对一些锁表操作进行优化。
通过EXPLAIN分析低效SQL的执行计划
通过以上步骤查询到效率低的SQL后,我们可以通过explain或者desc 获取MySQL如何执行SELECT语句的信息,包括select语句执行过程表如何连接和连接的次序。
explain可以知道什么时候必须为表加入索引以得到一个使用索引来寻找记录的更快的SELECT。
mysql> explain select sum(moneys) from sales a,companys b where a.company_id = b.id and a.year = 2006;
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
| select_type | table | type | possible_keys| key | key_len | rows | Extra |
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
| SIMPLE | b | index | PRIMARY | PRIMARY | 4 | 1 | Using index |
| SIMPLE | a | ALL | NULL | NULL | NULL | 12 | Using where |
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
2 rows in set (0.02 sec)
说明:
select_type:select 类型
table:输出结果集的表
type:表示表的连接类型
①当表中仅有一行是type的值为system是最佳的连接类型;
②当select操作中使用索引进行表连接时type的值为ref;
③当select的表连接没有使用索引时,经常会看到type的值为ALL,表示对该表进行了全表扫描,这时需要考虑通过创建索引来提高表连接的效率。
possible_keys:表示查询时,可以使用的索引列.
key:表示使用的索引
key_len:索引长度
rows:扫描范围
Extra:执行情况的说明和描述
确定问题,并采取相应的优化措施
经过以上步骤,基本可以确认问题出现的原因,可以根据情况采取相应的措施,进行优化提高执行的效率。
例如上面的例子,我们确认是对a表的全表扫描导致效率的不理想,我们对a表的year字段创建了索引,查询需要扫描的行数明显较少。
mysql> explain select sum(moneys) from sales a,companys b where a.company_id = b.id and a.year = 2006;
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
| select_type | table | type | possible_keys| key | key_len | rows | Extra |
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
| SIMPLE | b | index | PRIMARY | PRIMARY | 4 | 1 | Using index |
| SIMPLE | a | ref | year | year | 4 | 3 | Using where |
+----------------+----------+-----------+----------------+----------------+----------+-----------+----------------+
2 rows in set (0.02 sec)
发表评论
-
基于Hash算法的Mysql分表处理
2015-10-29 00:58 584下面为您介绍的Mysql ... -
数据库中表散列
2015-10-29 00:52 590数据库中的散列法 ... -
mysql大数据高并发处理
2015-10-26 22:00 428一、数据库结构的设计 ... -
优化SQL查询:如何写出高性能SQL语句
2015-10-17 17:41 447优化SQL查询:如何写出高性能SQL语句 这个问题 ... -
MySqL性能优化
2015-09-06 21:26 0I 硬件配置优化 Ø CPU选择:多核 ... -
Mysq日志管理(错误日志、查询日志、慢查询日志)
2015-09-06 21:01 0错误日志 记录内容:包含了当mysqld启动和停止时,以及服 ... -
MySql均衡负载
2015-09-06 21:01 01) 利用mysql 复制分流查询操作 利用mysql的主从复 ... -
如何减少对Mysql的访问以优化SQL语句
2015-09-06 21:00 0避免对同一数据做重复 ... -
使用mysql连接池提高性能
2015-09-06 20:59 0对于访问数据库来说,建立连接的代价比较昂贵,因此,我们有必要建 ... -
Mysql锁的优化
2015-09-06 20:59 0获取锁等待情况 可以 ... -
Mysql数据表的优化
2015-09-26 22:26 435优化表的数据类型 表需要使用何种数据类型,是需要根据应用来判 ... -
调整Mysql中insert、update、delete的顺序来以提高效率
2015-09-26 22:26 621MySQL还允许改变语句调度的优先级,它可以使来自多个客户端的 ... -
Mysql join语句的优化
2015-09-26 22:25 347Mysql4.1开始支持SQL的子查询。这个技术可以使用SEL ... -
Mysql order by语句的优化
2015-09-19 11:56 404在某些情况中,MySQL可以使用一个索引来满足ORDER BY ... -
Mysql group by语句的优化
2015-09-13 16:01 387默认情况下,MySQL排序所有GROUP BY col1, c ... -
Mysql insert语句的优化
2015-09-08 22:59 3471) 如果你同时从同一客户插入很多行,使用多个值表的INSER ... -
Mysql大量插入数据时SQL语句的优化
2015-09-11 22:00 4741) 对于Myisam类型的表,可以通过以下方式快速的导入大量 ... -
Mysql索引优化教程
2015-09-08 22:59 418索引的存储分类 myisam表的数据文件和索引文件是自动分开 ... -
Mysql SQL Mode详解
2015-09-07 11:50 472Mysql SQL Mode简介 MySQL服务器能够工作在 ... -
Mysql使用SQL的安全问题,Mysql防止SQL注入
2015-09-07 11:50 405SQL注入简述 SQL Injection ...
相关推荐
MySQL数据库优化SQL篇PPT课件.pptx 本PPT课件主要讲述了MySQL数据库优化的重要知识点,特别是SQL优化方面的内容。从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和...
2.1优化SQL的一般步骤 2.2 索引问题. 2.3两个常用的优化技巧 2.4常用SQL优化 2.5常用SQL技巧 3.优化数据库对象 3.1优化表的数据类型逆规范化 3.2提高查询速度 4.锁问题 4.1MyISQM表锁 4.2InnoDB锁问题 5...
MySQL采用解析、优化、执行三个步骤来处理SQL语句。解析阶段会检查语法和权限;优化阶段会选择最佳的执行计划,包括决定表的读取顺序、是否使用索引等;执行阶段则是按照计划获取数据。在这个过程中,通过EXPLAIN...
了解MySQL如何解析并执行SQL语句对于优化至关重要,包括但不限于从`FROM`、`WHERE`、`GROUP BY`、`HAVING`、`SELECT`、`ORDER BY`、`LIMIT`等步骤的顺序执行。 #### 五、SQL语句性能规范 - **避免全表扫描**:尽...
在数据库管理与优化领域,SQL优化是至关重要的一环,它涉及到数据库性能的提升以及系统...了解每个系统的内部机制以及优化策略,结合实际的数据库使用情况,可以帮助DBA在不同的数据库环境下,有效地实现SQL优化目标。
MySQL数据库优化SQL篇学习教案 MySQL数据库优化SQL篇学习教案旨在帮助读者学习和掌握 MySQL 数据库优化的相关知识,涵盖了 SELECT 语句优化、执行计划、IN 和 EXISTS 语句、LIMIT 语句、RAND 函数、Order、Group、...
此外,还有开源工具如 ora2pg、Data Export等,虽然它们主要针对Oracle到PostgreSQL的迁移,但某些情况下也可以进行定制以适应MySQL到SQL Server的迁移。 3. **SSMA for MySQL**:该工具可以自动分析、转换MySQL的...
传智播客的MySQL SQL优化课程针对已有数据库开发经验的开发者,旨在深入理解MySQL的工作原理,掌握优化SQL查询的技巧,提升系统的整体性能。 1. **基础知识回顾** - **SQL语言基础**:了解SELECT、INSERT、UPDATE...
MySQL到SQL Server的转换是一个常见的数据库迁移任务,尤其在企业级应用中,可能因为业务需求、性能优化或统一管理等原因需要进行这样的迁移。这个过程涉及多个步骤,包括数据的导出、格式转换以及导入到新的SQL ...
MySQL 数据库与 SQL 优化是提高数据库性能的关键一步骤。 SQL 优化可以通过优化数据库结构、索引、查询语句等方式来实现。下面是 MySQL 数据库与 SQL 优化的主要知识点: 1. 数据库结构优化:数据库结构的设计对...
总结来说,从MySQL到Oracle的数据迁移是一个涉及多个步骤的过程,需要正确配置和管理数据库环境,确保用户和表空间设置正确,并且使用像SQL Developer这样的工具来简化迁移。在迁移过程中遇到问题时,要逐一排查,如...
├第一天视频,网盘文件,永久连接 01.MySQL高级课程内容介绍.mp4 ...15.MySQL高级优化SQL步骤explain之keyrowsextra.avi 16.MySQL高级优化SQL步骤showprofile.avi 17.MySQL高级优化SQL步骤trace工具.avi 18. .....
MySQL教程SQL优化 MySQL 是一种流行的开源关系数据库管理系统,广泛应用于各种 Web 应用程序中。随着数据量的增加,数据库的性能变得越来越重要。因此,MySQL 优化是保证数据库性能的关键步骤。本文将详细介绍 ...
小米开源的SOAR(SQL Optimizer And Rewriter)是一个专门针对MySQL数据库的SQL优化工具,它旨在帮助开发者和DBA更有效地诊断和优化SQL查询。 SOAR的主要功能包括: 1. **SQL诊断**:通过对SQL语句的分析,提供慢...
这一步骤需要注意数据类型不兼容的问题,例如,SQL Server的datetime与MySQL的datetime可能存在差异,需要进行适配。 3. 触发器和存储过程:SQL Server的触发器和存储过程是数据库逻辑的重要组成部分。在转换时,...
"SQL Server数据库数据转MySQL工具"正是一款解决这一问题的专业软件,它允许用户方便地将SQL Server中的数据转换到MySQL环境中。 SQL Server是一款由微软公司开发的关系型数据库管理系统(RDBMS),广泛应用于企业...
“MySQL参数优化辅助工具.txt”可能是这个工具的使用手册或输出报告,其中可能包含了详细的使用步骤、参数解释、案例分析等内容。使用者可以通过阅读这份文档,学习如何利用工具进行参数优化。 总的来说,使用...
以上这些是MySQL优化的基本步骤和方法,实际操作中需要结合具体情况灵活运用,并不断进行测试和调整,以达到最优的性能效果。提供的“mysql优化.ppt”可能包含更具体的指导和案例,而“tuning-primer.sh”可能是一个...
提到的博客文章“将MySQL数据库转移到SqlServer2008数据库”可能提供了具体的步骤和工具。常见的迁移工具包括: - **SQL Server Migration Assistant (SSMA)**:微软官方的工具,支持多种数据库向SQL Server的迁移...