专栏首页大数据-数据人生MySql慢查询检测与优化

MySql慢查询检测与优化

眼下用的最多的关系型数据库数MySql莫属了,之前也用过其它各种数据库。最近使用MySql一段时间了,突然好奇心下,想看看MySql到底性能如何?刚好最近手上有一份2000W的数据集,刚好拿过来练练手。

   这份数据csv格式总共有3个G,原始Sqlserver的bak文件解压后有7.8个G。数据总共有2000W条。这份数据仔细看过之后,消息量惊人,以下本文中以OR代替。查询OR记录数如下:

mysql> select count(*) from OR;
+----------+
| count(*) |
+----------+
| 20051420 |
+----------+
1 row in set (37.25 sec)

   这个数据量是刚导入的,我先用程序把原始的3G数据文件切割成100W条的文件,共22个。刚开始以为MySql对这个量是很难支持的,实际上官方说单表之前就支持4G,如果采用MyISAM存储引擎,最大表尺寸增加到了65536TB。一句话,3G是没有问题的。事实证明,确实如此。

一、关于Count的使用

    这里使用了count(*),突然好奇心下,查询了以下两条记录:

mysql> select count(name) from OR where name='张三'; 
+-------------+
| count(name) |
+-------------+
|         321 |
+-------------+
1 row in set (36.61 sec)

mysql> select count(*) from OR where name='张三';    
+----------+
| count(*) |
+----------+
|      321 |
+----------+
1 row in set (35.90 sec)

mysql> select count(1) from OR where name='张三'; 
+----------+
| count(1) |
+----------+
|      321 |
+----------+
1 row in set (35.65 sec)

   从以上查询结果可以看出,论速度count(1) > count(*) > count(name),注意,这里前提是没有任何主键和索引。并且这个速度差体现的也并非如何明显,不到1秒钟。还不足以让我们为此舌战。

二、加入索引

   对于上面查询,一下子就查了37秒,表没有做任何优化,显然速度还是可以大大提高的。要想提高查询速度,建立索引是最快最基本的方法啦,建立索引如下:

create index idx_open_room_name on OR (name);

   建立索引之后再重新执行上面那些查询,速度提升了不是几倍。如下:

mysql> select count(name) from OR where name='张三';   
+-------------+
| count(name) |
+-------------+
|         321 |
+-------------+
1 row in set (0.00 sec)

mysql> select count(*) from OR;                   
+----------+
| count(*) |
+----------+
| 20051420 |
+----------+
1 row in set (1 min 8.92 sec)

    可见对于索引字段的相关操作,效率会大大优化。

三、检测慢查询

    对于MySql中的慢查询,MySql是有一套成熟的监控日志的。可以自己配置慢查询监控日志,修改/etc/my.cnf,添加如下配置:

log-slow-queries = /data/mysql/logs/sql_slow.log       /*指定查询日志路径*/
long_query_time = 1                                    /*设定慢查询时间阀值:1S*/
log-queries-not-using-indexes                          

    重启MySql服务,即可在对应的日志路径下找到慢查询SQL。另外,MySql对应的慢查询分析软件很多,比如mysqldumpslow等等。大家都可以看看。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 在Linux下如何使用shell操作数据库

       我们一般在Windows下采用客户端连接数据库,也有直接在Linux下连接数据库的。但是,当我们想对数据库进行自动化管理的时候,比如:想通过shell脚本...

    幽鸿
  • 管理SQL Server 2008 数据库角色

    角色是SQL Server 2008用来集中管理数据库或者服务器的权限。数据库管理员将操作数据库的权限赋予角色。然后,数据库管理员再将角色赋给数据库用户或者登录...

    幽鸿
  • 用图片代替提交和重置按钮

    为了整个界面美观,我们需要对提交和重置按钮美化一番,可是无论用什么CSS样式定义按钮,都很难达到满意的效果,只得用JS+图片的方式进行处理,下边我是总结出的三种...

    幽鸿
  • 零基础使用Django2.0.1打造在线教育网站(十五):模板继承应用

    努力与运动兼备~~~有任何问题可以加我好友或者关注微信公众号,欢迎交流,我们一起进步!

    编程思录
  • 矩阵覆盖

    一份执着✘
  • Selenium 的使用1.网站模拟登录2.动态页面模拟点击3.执行 JavaScript 语句

    意气相许的许
  • 如何处理SAP HANA Web-Based Development Workbench的403 Forbidden错误

    打开SAP云平台上的SAP HANA Web-Based Development Workbench超链接:

    Jerry Wang
  • 使用SAP WebIDE开发SAP Fiori Worklist应用消费OData服务

    新建一个Destination,类型为HTTP,再添加三个额外的Properties,其中WebIDEUsage设置为odata_gen:

    Jerry Wang
  • 智能家装,互联网家装的下一次革命

    孟永辉
  • 如何找到SAP Cloud for Customer标准培训和认证方面的信息

    有一些朋友询问我如何在SAP官网上找到和SAP Cloud for Customer相关的标准培训信息,我这里把步骤写出来:

    Jerry Wang

扫码关注云+社区

领取腾讯云代金券