博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
我的升级
阅读量:6902 次
发布时间:2019-06-27

本文共 3131 字,大约阅读时间需要 10 分钟。

一、前言

       最近在刚完成了pw版本的升级程序,拿了个拥有3万多用户的小站跑了下,结果一次503的time out错误,最后修修补补跑完之后发现用了将近1个小时。于是将运行最慢的几个模块分析了下SQL语句。记录下。

 

二、环境描述

数据库:mysql,原数据和目标数据同一个服务。

操作系统:本地的ubuntu12.10

描述:原PW87:用户数据量3.4W,2.1W帖子数据,7.9W回复数据,3.1W原私信数据,数据库使用的引擎是myisam,

新pw9的数据库采用innodb引擎

 

二、sql记录分析

监听到一条用户数据查询如下:

 select * from pw_members order by uid limit 10000, 1000;

用explain分析得到如下:

myiasm引擎:

mysql> explain select * from pw_members order by uid limit 10000, 1000;

+----+-------------+------------+------+---------------+------+---------+------+-------+----------------+

| id | select_type | table      | type | possible_keys | key  | key_len | ref  | rows  | Extra          |
+----+-------------+------------+------+---------------+------+---------+------+-------+----------------+
|  1 | SIMPLE      | pw_members | ALL  | NULL          | NULL | NULL    | NULL | 34730 | Using filesort |
+----+-------------+------------+------+---------------+------+---------+------+-------+----------------+
1 row in set (0.00 sec)

 

innodb引擎:

mysql> explain select * from nw_user order by uid limit 10000, 1000;

+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows  | Extra |
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------+
|  1 | SIMPLE      | nw_user | index | NULL          | PRIMARY | 4       | NULL | 11000 |       |
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------+
1 row in set (0.01 sec)
两表使用都对uid建立唯一索引,

换种写法:

SELECT uid FROM pw_members WHERE uid > 10000  ORDER BY uid LIMIT 1000;

myisam引擎:

mysql> explain SELECT uid FROM pw_members WHERE uid > 10000  ORDER BY uid LIMIT 1000;+----+-------------+------------+-------+---------------+---------+---------+------+-------+--------------------------+

| id | select_type | table      | type  | possible_keys | key     | key_len | ref  | rows  | Extra                    |
+----+-------------+------------+-------+---------------+---------+---------+------+-------+--------------------------+
|  1 | SIMPLE      | pw_members | range | PRIMARY       | PRIMARY | 4       | NULL | 26074 | Using where; Using index |
+----+-------------+------------+-------+---------------+---------+---------+------+-------+--------------------------+
innodb引擎:

mysql> explain select * from nw_user where uid > 10000 order by uid limit 10000, 1000;

+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------------+
| id | select_type | table   | type  | possible_keys | key     | key_len | ref  | rows  | Extra       |
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------------+
|  1 | SIMPLE      | nw_user | range | PRIMARY       | PRIMARY | 4       | NULL | 17461 | Using where |
+----+-------------+---------+-------+---------------+---------+---------+------+-------+-------------+

我的结论:

横向相比,对于第一种写法,innodb处理的方式会比myisam优雅点,而第二种写法则差不多。

纵向相比,则第二种写法处理起来无论在innodb或是myisam都比第一种写法优雅。

注:这次的数据量确实不大,所以得出这个结论也许有些站不住脚,等我遇到更大数据量的时候再来回头看看这个结论如何。

于是我将从myisam有主键的处理查询都改为第二种形式,从innodb处理的则根据情况处理。

 

三、

      第一次处理这种数据转移,没有什么经验,也正在摸索阶段,希望各位大大么多多留言哈

转载于:https://www.cnblogs.com/xiaoyaoxia/archive/2012/12/14/2817999.html

你可能感兴趣的文章
MRP(Media Redundancy Protocol)介质冗余协议
查看>>
在SQL查询中使用LIKE来代替IN
查看>>
mysql主从相关
查看>>
学习网络-TCP/IP模型
查看>>
oracle集群件
查看>>
linux shell 中"2>&1"含义
查看>>
oracle 11g RAC grid安装前准备
查看>>
01背包 暴力搜索
查看>>
RIP区域和OSPF区域通信
查看>>
MySQL
查看>>
k3cloud开发环境引入dll与net源代码
查看>>
网络安全系列之四十 在Linux中设置SET位权限
查看>>
SCCM OSD部署排错
查看>>
十道非常好的shell脚本试题
查看>>
app项目案例一手机浏览器
查看>>
linuxmint安装配置
查看>>
java 中 isEmpty和isBlank区别
查看>>
申请SSL证书怎样验证域名所有权
查看>>
麒麟开源堡垒机集中管控平台软件简介
查看>>
第十一单元练习
查看>>