专栏首页大数据-数据人生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 条评论
登录 后参与评论

相关文章

  • mysql:索引原理与慢查询优化

    一 索引的原理 1. 索引原理 索引的目的在于提高查询效率,与我们查阅图书所用的目录是一个道理:先定位到章,然后定位到该章下的一个小节,然后找到页数。相似的例子...

    用户1214487
  • MySQL 之 索引原理与慢查询优化

    浏览目录 一 索引介绍 二 索引方法 三 索引类型 四 聚合索引和辅助索引  五 测试索引 六 正确使用索引 七 组合索引 八 注意事项 九 查询计划 十 慢日...

    人生不如戏
  • MYSQL之索引原理与慢查询优化

    一、索引 1、介绍   一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的也是最容易出现问题的,...

    新人小试
  • MySQL慢查询优化 EXPLAIN详解

    DEPENDENT UNION:连接查询中的第2个或后面的SELECT语句,取决于外面的查询;

    Java帮帮
  • MySQL性能优化(四)-慢查询

    它能记录下所有执行超过longquerytime时间的SQL语句,帮我们找到执行慢的SQL,方便我们对这些SQL进行优化。

    码农小胖哥
  • Mysql性能优化——慢查询分析

    MYSQL数据库是常见的两个瓶颈是CPU和I/O的瓶颈,CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候。磁盘I/O瓶颈发生在装入...

    L宝宝聊IT
  • MySQL慢查询优化 | 联结原理

    前段时间笔者开发某个项目遇到了MySQL性能问题,每张表的数据量都在五千万以上,个别表数据量甚至在一个亿以上,在开发的过程中遇到了非常多的数据库性能优化难点,笔...

    王知无-import_bigdata
  • 「mysql优化专题」什么是慢查询?如何通过慢查询日志优化?(10)

    日志就跟人们写的日记一样,记录着过往的事情。但是人的日记是主观的(记自己想记的内容),而数据库的日志是客观的,根据记录内容分为以下好几种日志:

    java进阶架构师
  • MySQL索引原理及慢查询优化

    出处:美团技术博客 链接:http://tech.meituan.com/mysql-index.html

    二狗不要跑
  • 常见mysql的慢查询优化方式

    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time...

    田维常
  • 系统优化:MYSQL慢查询和日志

    MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL...

    三哥
  • MySQL索引原理及慢查询优化

    MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。

    Java架构师必看
  • MySQL 系列教程之(十一)Explain 与慢查询优化

    应该尽量避免在 where 子句中使用 != 或 not in 或 <> 操作符,因为这几个操作符都会导致索引失效而进行全表扫描。

    ruochen
  • Mysql慢查询日志的使用 和 Mysql的优化

    1、临时开启慢查询日志(如果需要长时间开启,则需要更改mysql配置文件,第6点有介绍)

    lyb-geek
  • Mysql性能优化之开启Mysql慢查询日志

    查看当前服务器是否开启慢查询: 1、快速办法,运行sql语句show VARIABLES like "%slow%" 2、直接去my.conf中查看。 my.c...

    思梦php
  • MySQL 案例:Threads_running 与慢查询

    年前本应该是回顾一年工作和收尾的阶段,奈何各种促销,活动都等着春节,因此也遇到了不少的问题,回顾了一下最近遇到的问题,发现有好几个问题比较类似,正好整理一下,作...

    王文安@DBA
  • [日常] PHP与Mysql测试kill慢查询并检验PDO的错误模式

    陶士涵
  • MySQL查询优化

         一个好的web应用,最重要的一点是有着优秀的访问性能。数据库MySQL是web应用的组成部分,也是决定其性能的重要部分。所以提升MySQL的性能至关重...

    那一叶随风
  • MySQL 查询优化

    guanguans

扫码关注云+社区

领取腾讯云代金券