mysql优化经验

问题:cpu负载过高,达到36。

现象:通过mysqladmin -uroot -p processlist 查看到大量如下信息:

Sending data  select * from `rep_corp_vehicle_online_count` where corp_id = 48 and vehicle_id = 10017543

根据以上的可能是表rep_corp_vehicle_online_count的问题 做出如下测试:

查看表结构:

mysql> desc rep_corp_vehicle_online_count;
+-------------+-------------+------+-----+---------+----------------+
| Field       | Type        | Null | Key | Default | Extra          |
+-------------+-------------+------+-----+---------+----------------+
| id          | int(11)     | NO   | PRI | NULL    | auto_increment |
| corp_id     | int(11)     | NO   |     | NULL    |                |
| vehicle_id  | int(11)     | NO   |     | NULL    |                |
| online_day  | varchar(20) | NO   |     | NULL    |                |
| loc_total   | int(11)     | NO   |     | NULL    |                |
| create_time | datetime    | NO   |     | NULL    |                |
| update_time | datetime    | NO   |     | NULL    |                |
+-------------+-------------+------+-----+---------+----------------+

7 rows in set (0.00 sec)

查看索引,只有主键索引:

mysql> show index from rep_corp_vehicle_online_count;
+-------------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table                         | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| rep_corp_vehicle_online_count |          0 | PRIMARY  |            1 | id          | A         |     1247259 |     NULL | NULL   |      | BTREE      |         |               |
+-------------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+

1 row in set (0.00 sec)

代码执行情况:

mysql>explain  select * from rep_corp_vehicle_online_count where corp_id = 79 and vehicle_id = 10016911 and online_day = ‘2016-03-29‘\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: rep_corp_vehicle_online_count
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 1248495
        Extra: Using where
1 row in set (0.00 sec)

表数据分析情况,重复数据很多:

mysql> select count(distinct corp_id) from rep_corp_vehicle_online_count;
+-------------------------+
| count(distinct corp_id) |
+-------------------------+
|                      18 |
+-------------------------+
1 row in set (0.63 sec)
mysql> select count(corp_id) from rep_corp_vehicle_online_count;            
+----------------+
| count(corp_id) |
+----------------+
|        1239573 |
+----------------+
1 row in set (0.00 sec)
mysql> select count(distinct vehicle_id) from rep_corp_vehicle_online_count;       
+----------------------------+
| count(distinct vehicle_id) |
+----------------------------+
|                       2580 |
+----------------------------+
1 row in set (1.03 sec)
mysql>explain select count(vehicle_id) from rep_corp_vehicle_online_count;         
+-------------------+
| count(vehicle_id) |
+-------------------+
|           1239911 |
+-------------------+
1 row in set (0.00 sec)

最后处理,创建索引:

mysql> create index r_c_v on rep_corp_vehicle_online_count(corp_id,vehicle_id);        
Query OK, 1487993 rows affected (6.09 sec)
Records: 1487993  Duplicates: 0  Warnings: 0
mysql> show index from rep_corp_vehicle_online_count;
+-------------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| Table                         | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment |
+-------------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
| rep_corp_vehicle_online_count |          0 | PRIMARY  |            1 | id          | A         |     1490176 |     NULL | NULL   |      | BTREE      |         |               |
| rep_corp_vehicle_online_count |          1 | r_c_v    |            1 | corp_id     | A         |          18 |     NULL | NULL   |      | BTREE      |         |               |
| rep_corp_vehicle_online_count |          1 | r_c_v    |            2 | vehicle_id  | A         |        2596 |     NULL | NULL   |      | BTREE      |         |               |
+-------------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+
3 rows in set (0.00 sec)

添加索引过后负载降低到了1.73:

时间: 2024-10-25 20:17:00

mysql优化经验的相关文章

第一次写博,就贡献出这篇MySQL优化经验。

如何写出高效的SQL语句(从建表到查询) 建表时可以得出以下优化建议 1. 数据类型尽量用数字型,数字型比字符型的快 2. 选择正确的表引擎 MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很好.甚至你只是需要update一个字段,整个表都会被锁起来,而别的进程,就算是读进程都无法操作直到读操作完成.另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的.  InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还

20多条MySQL 性能优化经验分享

当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能.这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库.希望下面的这些优化技巧对你有用. 1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了. 这里最主要

MySQL优化概述

MySQL优化概述 设计: 存储引擎,字段类型,范式 功能: 索引,缓存,分区. 架构: 主从复制,读写分离,负载均衡. 合理SQL: 测试,经验. 存储引擎 Create table tableName () engine=myisam|innodb; 一种用来存储MySQL中对象(记录和索引)的一种特定的结构(文件结构) 存储引擎,处于MySQL服务器的最底层,直接存储数据.导致上层的操作,依赖于存储引擎的选择. Tip:存储引擎就是特定的数据存储格式(方案) Show engines 查看

单表60亿记录等大数据场景的MySQL优化和运维之道

此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高级数据库工程师,负责新浪微博核心数据库架构改造优化,以及数据库相关的服务器存储选型设计. 前言 MySQL数据库大家应该都很熟悉,而且随着前几年的阿里的去IOE,MySQL逐渐引起更多人的重视. MySQL历史 1979年,Monty Widenius写了最初的版本,

第24章 mysql 优化

2015-10-25 目录 参考资料 [1] 唐汉明.深入浅出MySQL 数据库开发.优化与管理维护(第2版)[M].北京:人民邮电出版社,2014 [2] Schwartz.高性能MySQL(第3版)[M].北京:电子工业出版社,2013 [3] MySQL 性能优化的最佳20多条经验分享 [4] mysql性能优化-慢查询分析.优化索引和配置 [5] MySQL优化必须调整的10项配置 [6] MySQL 配置优化 [7] Mysql数据库优化总结 [8] MySQL安装配置与性能优化 [9

一.mysql优化

一.mysql优化 1.网站请求走向分析优化的方面 需要优化的地方: a:网络优化,服务器硬件方面,CDN加速(访问离用户最近一台服务器获取资源文件(jquery,js)) b:页面静态化处理,访问速度更快 c:php代码本身需要优化(需要自身经验的积累) d:使用memcache,redis减轻数据库的压力,减少磁盘的i/o开销 e:mysql本身的优化 f:mysql架构(读写分离,主从复制) 2.mysql的优化的方向 存储层:选择合适的存储引擎,选择适当的列类型 设计层:给数据表建立合适

单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构(转)

转自http://www.php1.cn/Content/DanBiao_60_YiJiLuDengDaShuJuChangJingDe_MySQL_YouHuaHeYunWeiZhiDao_%7C_GaoKeYongJiaGou.html, 更多详细资料请参看原文 此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据存储平台建设和架构设计.前新浪高

今天开始学习Mysql优化技术

随着工作的深入,愈发觉得数据库优化方面知识方面的重要性,于是下载了韩顺平的Mysql优化技术的视频,这里全当课后笔记,里面可能会穿插一些自己的工作经验(感谢韩老师). Mysql优化不是一种动作,而是全套动作,包括 : 1.表的设计合理化 2.添加适当的索引 3.分表技术(水平分表,垂直分表) 4.读写分离技术 5.对常用的sql语句使用存储过程(免去了dbms对sql的编译过程,但是降低了可移植性) 6.修改mysql配置(my.ini),比如mysql最大并发量,缓存之类的配置 7.碎片整理

Mysql优化小记1

在项目开发中,需要写个windows服务从sqlserver复制数据到mysql(5.6.13 Win64(x86_64)),然后对这些数据进行计算分析.每15分钟复制一次,每次复制大概200条数据,每隔1小时对新同步的数据进行计算. 我们的mysql服务器是个破台式机,如下:(最初4G内存) 随着时间推移,数据量不断增加,目前数据表有7295400条数据.眼看着同步数据耗时越来越长,从最初的10秒左右,到目前的7,8分钟,有时更甚达到十几分钟.计算服务耗时从最初的几分钟到目前的40多分钟.磁盘