网站开发日记(14)-MYSQL子查询和嵌套查询优化
来源:互联网 发布:星际争霸人类 知乎 编辑:程序博客网 时间:2024/06/05 17:08
查询游戏历史成绩最高分前100
执行时间仅为0.22秒,比原来的25秒提高了10000倍
查询当天游戏最好成绩
像查询里
特别消耗时间
另外,像:这样的语句会导致索引无效,因为对每个dataline的值都需要用函数计算一遍,需要调整为:
//更改后
对于每个球员,找出球员号码,名字以及他所引起的罚款的号码,但只是针对那些至少有两次罚款的球员。
更紧凑的查询,在FROM子句中放置一个子查询。
FROM子句中的子查询决定了每个球员的号码,名字和罚款的编号。接下来,这个号码变成了中间结果中的一列。然后指定了一个条件(NUMBER>=2);最后,获取SELECT子句中的列。
- SELECT ps.* FROM cdb_playsgame ps WHERE ps.credits=(select MAX(credits)
- FROM cdb_playsgame ps1
- where ps.uid=ps1.uid AND ps.gametag=ps1.gametag) AND ps.gametag='yeti3'
- GROUP BY ps.uid order by ps.credits desc LIMIT 100;
- SELECT ps.*
- FROM cdb_playsgame ps,(select ps1.uid, ps1.gametag, MAX(credits) as credits
- FROM cdb_playsgame ps1 group by uid,gametag) t
- WHERE ps.credits=t.credits AND ps.uid=t.uid AND ps.gametag=t.gametag AND ps.gametag='yeti3'
- GROUP BY ps.uid order by ps.credits desc LIMIT 100;
查询当天游戏最好成绩
- SELECT ps. * , mf. * , m.username
- FROM cdb_playsgame ps
- LEFT JOIN cdb_memberfields mf ON mf.uid = ps.uid
- LEFT JOIN cdb_members m ON m.uid = ps.uid
- WHERE ps.gametag = 'chuansj'
- AND FROM_UNIXTIME( ps.dateline, '%Y%m%d' ) = '20081008'
- AND ps.credits = (
- SELECT MAX( ps1.credits )
- FROM cdb_playsgame ps1
- WHERE ps.uid = ps1.uid
- AND ps1.gametag = 'chuansj'
- AND FROM_UNIXTIME( ps1.dateline, '%Y%m%d' ) = '20081008' )
- GROUP BY ps.uid
- ORDER BY credits DESC
- LIMIT 0 , 50
像查询里
- AND ps.credits=(SELECT MAX(ps1.credits)
- FROM {$tablepre}playsgame ps1 where ps.uid=ps1.uid AND ps1.gametag = '$game'
- AND FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '$todaytime' )
特别消耗时间
另外,像:
- FROM_UNIXTIME(ps1.dateline, '%Y%m%d') = '$todaytime'
- AND ps1.dateline >= UNIX_TIMESTAMP('$todaytime')
//更改后
- SELECT ps. * , mf. * , m.username
- FROM cdb_playsgame ps, cdb_memberfields mf, cdb_members m, (
- SELECT ps1.uid, MAX( ps1.credits ) AS credits
- FROM cdb_playsgame ps1
- WHERE ps1.gametag = 'chuansj'
- AND ps1.dateline >= UNIX_TIMESTAMP( '20081008' )
- GROUP BY ps1.uid
- ) AS t
- WHERE mf.uid = ps.uid
- AND m.uid = ps.uid
- AND ps.gametag = 'chuansj'
- AND ps.credits = t.credits
- AND ps.uid = t.uid
- GROUP BY ps.uid
- ORDER BY credits DESC
- LIMIT 0 , 50
对于每个球员,找出球员号码,名字以及他所引起的罚款的号码,但只是针对那些至少有两次罚款的球员。
更紧凑的查询,在FROM子句中放置一个子查询。
- SELECT PLAYERNO,NAME,NUMBER
- FROM (SELECT PLAYERNO,NAME,
- (SELECT COUNT(*)
- FROM PENALTIES
- WHERE PENALTIES.PLAYERNO =
- PLAYERS.PLAYERNO)
- AS NUMBER
- FROM PLYERS) AS PN
- WHERE NUMBER>=2
FROM子句中的子查询决定了每个球员的号码,名字和罚款的编号。接下来,这个号码变成了中间结果中的一列。然后指定了一个条件(NUMBER>=2);最后,获取SELECT子句中的列。
0 0
- 网站开发日记(14)-MYSQL子查询和嵌套查询优化
- MySQL相关子查询和嵌套子查询
- 相关子查询和嵌套子查询
- 相关子查询和嵌套子查询
- 优化mysql嵌套查询和联表查询
- 优化MySQL嵌套查询和联表查询
- MySQL-子查询(嵌套)
- mysql子查询优化
- mysql 子查询优化
- MySQL嵌套查询(子查询)
- 嵌套查询:相关子查询和非相关子查询
- 相关查询的子查询和嵌套子查询
- 【mysql】SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)
- 【mysql】SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)
- 【mysql】SQL嵌套子查询和相关子查询的执行过程有什么区别(推荐)
- Mysql子查询优化技术
- 优化mysql标量子查询
- MySQL子查询效率优化
- ggplot2学习心得之qplot
- 经纬财富:汉中今日非农多空巅峰对决
- 小谈边界问题
- shell 中getopts的简单解述
- 二叉树相关操作(最全前中后遍历 等)
- 网站开发日记(14)-MYSQL子查询和嵌套查询优化
- 你真的会python嘛?
- 九度题目1447:最短路
- 网站开发-php开发手机论坛(2)-http协议以及网络原理
- 0x00AE18F8 处有未经处理的异常: 0xC0000005: 读取位置 0x00000020 时发生访问冲突。
- Python的魔法(一): 基本知识
- 再谈javascript图片预加载技术
- 值类型和引用类型的存储
- 黑马程序员——Map架构小议