改了一行代码,MySQL查询效率提升了80%,老板奖了我50万

 ⭐前言

        优化MySQL数据库是数据库管理员必备的技能,通过不同的优化方式方法来达到提高MySQL数据库性能的目的。

        MySQL数据库当用户和数据量非常少的情况下,我们就很难判断MySQL数据库性能的好坏。只有当用户量与数据量大起来,MySQL的性能如何才能体现。查询是数据库最频繁的操作,提高查询速度可以有效地提高MySQL数据库的性能。


优化查询

⭐SHOW STATUS 语句查询MySQL数据库性能⭐

⭐分析查询语句⭐

⭐索引对查询速度的影响⭐

⭐LIKE 优化索引查询⭐

⭐使用多列索引⭐

⭐使用关键字or⭐


⭐SHOW STATUS 语句查询MySQL数据库性能⭐

我们可以使用 SHOW STATUS 语句查询MySQL数据库性能。

语法格式:

SHOW STATUS LIKE 'VALUE'

VALUE参数有如下几种

  1. Connection:连接MySQL服务器的次数。
  2. Uptime:MySQL服务器的上线时间。
  3. Slow_queries:慢查询次数。
  4. Com_select:查询操作的次数。
  5. Com_insert:插入操作的次数。
  6. Com_delete:删除操作的次数。

通过这些参数我们可以分析MySQL数据库性能。然后根据分析结果,进行 相应的性能优化。



⭐分析查询语句⭐

可以使用EXPLAIN语句和DESCRIBE语句来分析查询语句。

语法格式:

#EXPLAIN 语法格式
EXPLAIN  SELECT 语句;

#DESCRIBE 语法格式
DESCRIBE SELECT 语句;

 接下来分别对EXPLAINDESCRIBE进行介绍

使用EXPLAIN语句分析查询语句

 其中各字段所代表的意义:

id:指出在整个查询中select的位置。

table:存放所查询的表名。

type:连接类型,该列中存储很多值,范围从const到All。

possible_keys:指出为了提高查找速度,在MySQL中可以使用的索引。

key:指出实际使用的键。

rows:指出MySQL需要在相应表中返回查询结果所检验的行数,为了得到该总行数,MySQL必须扫描处理整个查询,再乘以每个表的行值。

Extra:包含一些其他信息,设计MySQL如何处理查询。


使用DESCRIBE语句分析查询语句

 DESCRIBE语句的使用方法与EXPLAIN语法是相同的,这两者的分析结果也大体相同。


⭐索引对查询速度的影响⭐

我们在查询的过程中使用索引,可以提高数据库查询效率,减少查询次数。接下来我们通过例子来对比一下使用索引和不使用索引对于查询速度的差异。


我们通过查询student表来分析使用索引和不使用索引的情况。

 


未使用索引的查询情况

explain select * from student where stuname = 'zhangsan';

 分析:在未使用索引的情况下,我们发现原来表中的三条数据都被查询了一遍。这时会有人说,才三条数据有什么影响?当然,数据量很少的情况下,查询效率不会有太大差别。如果数据库中数据量庞大的时候,比如上千万条,那我们在查询的时候这上千万条数据都会被检索一遍,用户为了查询一条数据而遍历上千万条数据,将会消耗大量时间资源。


使用索引的查询情况

我们先给stuname字段加上索引

CREATE INDEX index_stuname ON student(stuname);

 加上索引后我们在查询

explain select * from student where stuname = 'zhangsan';

 分析:从上述结果可以看到,由于创建的索引使访问的行数由3减少到1,所以,在查询操作中,使用索引不但会优化查询效率,还会降低服务器的开销。


⭐LIKE 优化索引查询⭐

当第一个字符为“%”时,索引不会被使用,如果“%”所在匹配字符串中位置不是第一位置,则索引会被正常使用

explain select * from student where stuname like 'zh%';

 


⭐使用多列索引⭐

多列索引在表的多个字段上创建一个索引,只有查询条件中使用了这些字段中的一个字段时,索引才会被正常使用。

创建多列索引

CREATE INDEX index_student ON student(stuname,stuage);

注意:我们在查询的时候如果应用stuage字段,索引不能被正常使用,必须使用第一字段stuname时,索引才正常生效。这点一定要记住!



⭐使用关键字or⭐

       在MySQL中,查询语句只有包含关键字or时,要求查询的两个字段必须同为索引,如果所搜索的条件中,有一个字段不为索引,则在查询中不会应用索引进行查询,索引不会生效,查询效率不会提升。


这篇文章如果对小伙伴们有帮助的话,希望点个赞支持一下~      十分感谢~


猜你喜欢

转载自blog.csdn.net/weixin_42306958/article/details/123079074