MySQL——sql优化(二)
来源:互联网 发布:对号入座的网络词 编辑:程序博客网 时间:2024/05/02 02:39
一点记录:
offset优化:
原始语句:
mysql> explain SELECT rid, qid, status, source, deleted, uid, toUid, uname, content, misFlag, createTime, uip, opTime, opUid, likeCnt, opName, auditSt, applyTime, ext, likeCnt FROM tblArticleReply1 WHERE (qid = 2819559) ORDER BY rid ASC LIMIT 41 OFFSET 24920\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: tblArticleReply1
type: ref
possible_keys: qid,qid_likecnt
key: qid
key_len: 4
ref: const
rows: 52188
Extra: Using where
1 row in set (0.00 sec)
测试环境中执行9s时间。。数据量大时很危险
优化:
mysql> explain SELECT t2.rid, qid, status, source, deleted, uid, toUid, uname, content, misFlag, createTime, uip, opTime, opUid, likeCnt, opName, auditSt, applyTime, ext, likeCnt FROM tblArticleReply1 t2 join (select rid from tblArticleReply1 WHERE (qid = 2819559) ORDER BY rid ASC LIMIT 41 OFFSET 24920) t1 on t1.rid = t2.rid\G;
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: <derived2>
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 41
Extra:
*************************** 2. row ***************************
id: 1
select_type: PRIMARY
table: t2
type: eq_ref
possible_keys: idx_rid
key: idx_rid
key_len: 4
ref: t1.rid
rows: 1
Extra:
*************************** 3. row ***************************
id: 2
select_type: DERIVED
table: tblArticleReply1
type: ref
possible_keys: qid,qid_likecnt
key: qid
key_len: 4
ref:
rows: 52188
Extra: Using where; Using index
3 rows in set (0.01 sec)
这里使用了索引排序,现将查询结果集减少后再用小的结果集去连表。测试环境下执行时间0.02s,优化了不少啊!
索引排序:在mysql中索引本身就是排序好的,所以在第二条语句中只需要用where条件查询到rid,然后取出40条就行。
这里有一点需要注意:一定要用小结果集去join大结果集,否则就会有如下情况:
mysql> explain SELECT t2.rid, qid, status, source, deleted, uid, toUid, uname, content, misFlag, createTime, uip, opTime, opUid, likeCnt, opName, auditSt, applyTime, ext, likeCnt FROM tblArticleReply1 t2 left join (select rid from tblArticleReply1 WHERE (qid = 2819559) ORDER BY rid ASC LIMIT 41 OFFSET 24920) t1 on t1.rid = t2.rid\G;
*************************** 1. row ***************************
id: 1
select_type: PRIMARY
table: t2
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 38251327
Extra:
*************************** 2. row ***************************
id: 1
select_type: PRIMARY
table: <derived2>
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 41
Extra:
*************************** 3. row ***************************
id: 2
select_type: DERIVED
table: tblArticleReply1
type: ref
possible_keys: qid,qid_likecnt
key: qid
key_len: 4
ref:
rows: 52188
Extra: Using where; Using index
3 rows in set (0.01 sec)
可以看出扫描行数很多且没有使用索引。。测试环境中没跑出来。。
- MySQL——sql优化(二)
- MySQL——常用SQL优化(二)
- 数据库优化<二>SQL优化之SELECT优化 ——mysql内部优化策略
- MySQL—SQL优化
- Mysql的一条SQL优化(二)
- 【MySQL】基于MySQL的SQL优化(二)——对count()、max()的优化
- 【MySql】Sql优化(二)——影响性能的因素
- mysql优化之二(SQL语句优化)
- 性能优化之MySQL优化(二)- explain分析SQL
- Mysql优化(一)—Sql语句
- 【MySql】Sql优化(三)——性能优化
- MySQL数据库优化(二)——MySQL事务
- 【MySql】Sql优化(一)——Sql执行流程
- 【MySQL】基于MySQL的SQL优化(五)——建立索引优化SQL
- SQL优化(二)
- SQL优化(二)
- MySQL 优化(二)
- MySQL 优化(二)
- 计算机视觉库、人脸识别开源库
- 注解(Annotation)介绍
- C/C++/ 文件
- JDBC对数据进行插入,更新或者是删除之后得到修改或者插入的那条记录的主键值
- Genymotion模拟器引起的Address already in use ADB server didn't ACK
- MySQL——sql优化(二)
- 乘法、除法与 0
- Different Ways to Add Parentheses
- mean开发之二:设置npm全局地址
- C语言链式栈和顺序栈的实现
- python 调用图像处理类库PIL 时遇到的问题
- 欢迎使用CSDN-markdown编辑器
- 把一个数的二进制表示反转后得到的数
- 数学测试5