搜索
首页数据库mysql教程MySQL SQL优化笔记的实际操作流程

以下的文章主要讲述的是MySQL SQL优化的实际应用笔记的实际操作流程,以及关于Mysql查询使用 index 的问题解决, 如果你对其相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了。 Mysql的强制索引(Force Index)都为我们做了哪些优化? mysql5下大

以下的文章主要讲述的是 MySQL SQL优化的实际应用笔记的实际操作流程,以及关于Mysql查询使用 index 的问题解决, 如果你对其相关的实际操作有兴趣的话,你就可以对以下的文章点击观看了。

Mysql的强制索引(Force Index)都为我们做了哪些优化?

mysql5下大数据量查询优化的问题

推荐圈子: Database圈子

更多相关推荐 一般使用SQL的时候你是不会去想到优化。但是面对一个有MySQL SQL性能问题的数据库时,我们应该如何入手进行系统的分析,使得能够尽快定位问题SQL,并且尽快解决问题。

1.使用show status 命令了解各种MySQL SQL的执行频率

引用

例如在Mysql的Cline上输入

show status like 'Com_%';

显示的是一些:Com_xxx.

Com_xxx 表示每个xx语句执行的次数。通常情况下我们比较关注如下一些操作:

引用

Com_select:执行select操作的次数

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操作删除的行数

通过上面的一些参数,我们可以了解当前数据库的应用是以插入为主还是以查询为主。以及各种类型的MySQL SQL大致的执行比例是多少。对于更新操作的计数,是对执行次数的计数,不管提交还是回滚都会进行累加。

对于事务型的应用,通过Com_commit和Com_rollback进行分析。如果回滚操作非常频繁那么要思考下是不是编写存在问题。

下面有几个参数用于了解数据库的基本情况

引用

Connections:试图连接Mysql服务器的次数(执行的命令是:show status like 'Con_%';)

Uptime: 服务器工作时间(执行的命令是:show status like 'Up_%';)

Slow_queries:慢查询的次数(执行的命令是:show status like 'Slow_%';)

2. 定位执行效率较低的MySQL SQL语句

要想定义效率较低的SQL可以按照下面两种方式试试。

引用

1. 通过慢查询日志定位那些执行效率较低的SQL语句,用 --log-slow-queries[=file_name]选项启动时,mysqld写一个包含所有执行时间超过long_query_time秒的SQL语句的日志文件。

2. 慢查询日志在查询结束以后才记录,所以在应用反映执行效率出现问题的时候进行查询慢查询日志并不能定位问题,可以使show processlist 命令查看当前MySQL在进行的线程,包括线程的状态,是否锁表等,可以实时地查看SQL的执行情况,同时对一些锁表操作进优化。

3. 使用EXPLAIN分析低效SQL的执行计划。

在查询到效率低的MySQLSQL语句后,那我们可以使用explain或者DESC命令获取Myswl如何执行SELECT语句的信息,包括在Select语句执行过程中表如何连接和连接的顺序。

例如你想计数xxxx年公司的销售额,那么需要操作sales和comapny table,并对money字段进行sum操作。看看怎么使用explain:

引用

explain select sum(moneys) from sales a company b where a.company_id = b.id and a.year=XXXX \G;(注意加上\G是为了更好的看)

显示如下:

<ol class="dp-xml">
<li class="alt"><span><span>*********************** 1. row***************************   </span></span></li>
<li><span>id: 1   </span></li>
<li class="alt"><span>select_type: SIMPLE   </span></li>
<li><span>table: a   </span></li>
<li class="alt"><span>type: ALL   </span></li>
<li><span>possible_keys: NULL   </span></li>
<li class="alt"><span>key:NULL   </span></li>
<li><span>key_len: NULL   </span></li>
<li class="alt"><span>ref: NULL   </span></li>
<li><span>rows:1000   </span></li>
<li class="alt"><span>Extra: Using where   </span></li>
<li><span>*********************** 2. row***************************   </span></li>
<li class="alt"><span>id: 2   </span></li>
<li><span>select_type: SIMPLE   </span></li>
<li class="alt"><span>table: b   </span></li>
<li><span>type: ref   </span></li>
<li class="alt"><span>possible_keys: ind_company_id   </span></li>
<li><span>key:ind_comapany_id   </span></li>
<li class="alt"><span>key_len: 5   </span></li>
<li><span>ref: sakila.a.company_id   </span></li>
<li class="alt"><span>rows:1   </span></li>
<li><span>Extra: Using where;Using index  </span></li>
</ol>

下面解释下每个列的含义:

引用

select_type: 表示SELECT的类型,常见的取值为SIMPLE(简单表,不使用表连接或者子查询)、PRIMARY(主查询,即外层的查询)、UNION、SUBQUERY

table: 输出结果集的表

type: 表示表的连接类型,性能由好到差的类型类型为

(System(表中仅有一行,即常量表),

const(单表中最多有一个匹配行),

eq_ref(对于前面的每一行,在此表中只查询一条记录),

ref(使用普通的索引),

ref_or_null(和ref类似,但是条件中包含对于NULL查询),

index_merge(索引合并优化),

unique_subquery(in的后面是一个查询主键字段的子查询),

index_subquery(类似unique_subquery,主要是in的后面是查询非唯一索引字段的子查询),

range(单表中的范围查询),

index(对于当前的每一行,都通过查询索引来得到数据),

all(对于当前的每一行,都通过全表扫描来得到数据))

possible_keys: 表示查询时,可能使用的索引

key:表示实际使用的索引

key_len:索引字段的长度

rows:扫描行的数量

Extra:执行情况的说明和描述

以上的相关内容就是对MySQL SQL优化的笔记的介绍,望你能有所收获。 


声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
MySQL字符串类型:存储,性能和最佳实践MySQL字符串类型:存储,性能和最佳实践May 10, 2025 am 12:02 AM

mySqlStringTypesimpactStorageAndPerformanCeaseAsfollows:1)长度,始终使用theSamestoragespace,whatcanbefasterbutlessspace-felfficity.2)varCharisvariable varcharisvariable length,morespace-morespace-morespace-effficitybuteftife buteftife butfority butfority textifforlyslower.3)

了解MySQL字符串类型:VARCHAR,文本,char等了解MySQL字符串类型:VARCHAR,文本,char等May 10, 2025 am 12:02 AM

mySqlStringTypesIncludeVarChar,文本,char,enum和set.1)varCharisVersAtileForvariable-lengthStringStringSuptOptoPeptoPepecifientlimit.2)textisidealforlargetStortStorStoverStorextorewiteWithoutAdefinedLengthl.3)charlisfixed-Length

MySQL中的字符串数据类型是什么?MySQL中的字符串数据类型是什么?May 10, 2025 am 12:01 AM

MySQLoffersvariousstringdatatypes:1)CHARforfixed-lengthstrings,2)VARCHARforvariable-lengthtext,3)BINARYandVARBINARYforbinarydata,4)BLOBandTEXTforlargedata,and5)ENUMandSETforcontrolledinput.Eachtypehasspecificusesandperformancecharacteristics,sochoose

如何向新的MySQL用户授予权限如何向新的MySQL用户授予权限May 09, 2025 am 12:16 AM

TograntpermissionstonewMySQLusers,followthesesteps:1)AccessMySQLasauserwithsufficientprivileges,2)CreateanewuserwiththeCREATEUSERcommand,3)UsetheGRANTcommandtospecifypermissionslikeSELECT,INSERT,UPDATE,orALLPRIVILEGESonspecificdatabasesortables,and4)

如何在MySQL中添加用户:逐步指南如何在MySQL中添加用户:逐步指南May 09, 2025 am 12:14 AM

toadduserInmysqleffectection andsecrely,theTheSepsps:1)USEtheCreateuserStattoDaneWuser,指定thehostandastrongpassword.2)GrantNectalRevileSaryPrivilegesSustate,usiveleanttatement,AdheringTotheTeprinciplelastPrevilegege.3)

mysql:添加具有复杂权限的新用户mysql:添加具有复杂权限的新用户May 09, 2025 am 12:09 AM

toaddanewuserwithcomplexpermissionsinmysql,loldtheSesteps:1)创建eTheEserWithCreateuser'newuser'newuser'@''localhost'Indedify'pa ssword';。2)GrantreadAccesstoalltablesin'mydatabase'withGrantSelectOnMyDatabase.to'newuser'@'localhost';。3)GrantWriteAccessto'

mysql:字符串数据类型和coltrationsmysql:字符串数据类型和coltrationsMay 09, 2025 am 12:08 AM

MySQL中的字符串数据类型包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT,排序规则(Collations)决定了字符串的比较和排序方式。1.CHAR适合固定长度字符串,VARCHAR适合可变长度字符串。2.BINARY和VARBINARY用于二进制数据,BLOB和TEXT用于大对象数据。3.排序规则如utf8mb4_unicode_ci忽略大小写,适合用户名;utf8mb4_bin区分大小写,适合需要精确比较的字段。

MySQL:我应该在Varchars上使用什么长度?MySQL:我应该在Varchars上使用什么长度?May 09, 2025 am 12:06 AM

最佳的MySQLVARCHAR列长度选择应基于数据分析、考虑未来增长、评估性能影响及字符集需求。1)分析数据以确定典型长度;2)预留未来扩展空间;3)注意大长度对性能的影响;4)考虑字符集对存储的影响。通过这些步骤,可以优化数据库的效率和扩展性。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一个PHP/MySQL的Web应用程序,非常容易受到攻击。它的主要目标是成为安全专业人员在合法环境中测试自己的技能和工具的辅助工具,帮助Web开发人员更好地理解保护Web应用程序的过程,并帮助教师/学生在课堂环境中教授/学习Web应用程序安全。DVWA的目标是通过简单直接的界面练习一些最常见的Web漏洞,难度各不相同。请注意,该软件中

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。