`

Mysql下优化SQL的一般步骤

阅读更多
通过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)
分享到:
评论

相关推荐

    MySQL数据库优化SQL篇PPT课件.pptx

    MySQL数据库优化SQL篇PPT课件.pptx 本PPT课件主要讲述了MySQL数据库优化的重要知识点,特别是SQL优化方面的内容。从执行计划、SELECT语句、IN和EXIST语句、LIMIT语句、RAND函数、Order by、Group by、Distinct和...

    MySQL技术内幕 SQL编程及优化.pdf

    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优化

    MySQL采用解析、优化、执行三个步骤来处理SQL语句。解析阶段会检查语法和权限;优化阶段会选择最佳的执行计划,包括决定表的读取顺序、是否使用索引等;执行阶段则是按照计划获取数据。在这个过程中,通过EXPLAIN...

    基于Mysql数据库的SQL优化

    了解MySQL如何解析并执行SQL语句对于优化至关重要,包括但不限于从`FROM`、`WHERE`、`GROUP BY`、`HAVING`、`SELECT`、`ORDER BY`、`LIMIT`等步骤的顺序执行。 #### 五、SQL语句性能规范 - **避免全表扫描**:尽...

    大道相通,得鱼忘筌 - 从Oracle的SQL优化到MySQL的SQL优化.pdf

    在数据库管理与优化领域,SQL优化是至关重要的一环,它涉及到数据库性能的提升以及系统...了解每个系统的内部机制以及优化策略,结合实际的数据库使用情况,可以帮助DBA在不同的数据库环境下,有效地实现SQL优化目标。

    MySQL数据库优化SQL篇PPT学习教案.pptx

    MySQL数据库优化SQL篇学习教案 MySQL数据库优化SQL篇学习教案旨在帮助读者学习和掌握 MySQL 数据库优化的相关知识,涵盖了 SELECT 语句优化、执行计划、IN 和 EXISTS 语句、LIMIT 语句、RAND 函数、Order、Group、...

    数据库转换工具MySQL 转为SqlServer 脚本

    此外,还有开源工具如 ora2pg、Data Export等,虽然它们主要针对Oracle到PostgreSQL的迁移,但某些情况下也可以进行定制以适应MySQL到SQL Server的迁移。 3. **SSMA for MySQL**:该工具可以自动分析、转换MySQL的...

    传智播客mysql的sql优化

    传智播客的MySQL SQL优化课程针对已有数据库开发经验的开发者,旨在深入理解MySQL的工作原理,掌握优化SQL查询的技巧,提升系统的整体性能。 1. **基础知识回顾** - **SQL语言基础**:了解SELECT、INSERT、UPDATE...

    mysql转换为sqlserver

    MySQL到SQL Server的转换是一个常见的数据库迁移任务,尤其在企业级应用中,可能因为业务需求、性能优化或统一管理等原因需要进行这样的迁移。这个过程涉及多个步骤,包括数据的导出、格式转换以及导入到新的SQL ...

    Mysql数据库与SQL优化+集群+负载均衡.doc

    MySQL 数据库与 SQL 优化是提高数据库性能的关键一步骤。 SQL 优化可以通过优化数据库结构、索引、查询语句等方式来实现。下面是 MySQL 数据库与 SQL 优化的主要知识点: 1. 数据库结构优化:数据库结构的设计对...

    记使用Oracle SQL Developer 迁移MySql 数据至 Oracle.docx

    总结来说,从MySQL到Oracle的数据迁移是一个涉及多个步骤的过程,需要正确配置和管理数据库环境,确保用户和表空间设置正确,并且使用像SQL Developer这样的工具来简化迁移。在迁移过程中遇到问题时,要逐一排查,如...

    2021年MySQL高级教程视频.rar

    ├第一天视频,网盘文件,永久连接 01.MySQL高级课程内容介绍.mp4 ...15.MySQL高级优化SQL步骤explain之keyrowsextra.avi 16.MySQL高级优化SQL步骤showprofile.avi 17.MySQL高级优化SQL步骤trace工具.avi 18. .....

    MySQL教程SQL优化

    MySQL教程SQL优化 MySQL 是一种流行的开源关系数据库管理系统,广泛应用于各种 Web 应用程序中。随着数据量的增加,数据库的性能变得越来越重要。因此,MySQL 优化是保证数据库性能的关键步骤。本文将详细介绍 ...

    mysql-sql优化-小米开源-soar

    小米开源的SOAR(SQL Optimizer And Rewriter)是一个专门针对MySQL数据库的SQL优化工具,它旨在帮助开发者和DBA更有效地诊断和优化SQL查询。 SOAR的主要功能包括: 1. **SQL诊断**:通过对SQL语句的分析,提供慢...

    SQL Server转换为MySQL工具

    这一步骤需要注意数据类型不兼容的问题,例如,SQL Server的datetime与MySQL的datetime可能存在差异,需要进行适配。 3. 触发器和存储过程:SQL Server的触发器和存储过程是数据库逻辑的重要组成部分。在转换时,...

    SQL Server数据库数据转MySQL工具

    "SQL Server数据库数据转MySQL工具"正是一款解决这一问题的专业软件,它允许用户方便地将SQL Server中的数据转换到MySQL环境中。 SQL Server是一款由微软公司开发的关系型数据库管理系统(RDBMS),广泛应用于企业...

    MySQL参数优化辅助工具

    “MySQL参数优化辅助工具.txt”可能是这个工具的使用手册或输出报告,其中可能包含了详细的使用步骤、参数解释、案例分析等内容。使用者可以通过阅读这份文档,学习如何利用工具进行参数优化。 总的来说,使用...

    mysql优化步骤方法

    以上这些是MySQL优化的基本步骤和方法,实际操作中需要结合具体情况灵活运用,并不断进行测试和调整,以达到最优的性能效果。提供的“mysql优化.ppt”可能包含更具体的指导和案例,而“tuning-primer.sh”可能是一个...

    MySQL数据库转移到SqlServer数据库

    提到的博客文章“将MySQL数据库转移到SqlServer2008数据库”可能提供了具体的步骤和工具。常见的迁移工具包括: - **SQL Server Migration Assistant (SSMA)**:微软官方的工具,支持多种数据库向SQL Server的迁移...

Global site tag (gtag.js) - Google Analytics