数据库教程:MYSQL子查询和嵌套查询优化实例解析分享

查询游戏历史成绩最高分前100

Sql代码

SELECTps.*FROMcdb_playsgamepsWHEREps.credits=(selectMAX(credits) FROMcdb_playsgameps1 whereps.uid=ps1.uidANDps.gametag=ps1.gametag)ANDps.gametag='yeti3' GROUPBYps.uidorderbyps.creditsdescLIMIT100;

Sql代码

SELECTps.* FROMcdb_playsgameps,(selectps1.uid,ps1.gametag,MAX(credits)ascredits FROMcdb_playsgameps1groupbyuid,gametag)t WHEREps.credits=t.creditsANDps.uid=t.uidANDps.gametag=t.gametagANDps.gametag='yeti3' GROUPBYps.uidorderbyps.creditsdescLIMIT100;

执行时间仅为0.22秒,比原来的25秒提高了10000倍

查询当天游戏最好成绩

Sql代码

SELECTps.*,mf.*,m.username FROMcdb_playsgameps LEFTJOINcdb_memberfieldsmfONmf.uid=ps.uid LEFTJOINcdb_membersmONm.uid=ps.uid WHEREps.gametag='chuansj' ANDFROM_UNIXTIME(ps.dateline,'%Y%m%d')='20081008' ANDps.credits=( SELECTMAX(ps1.credits) FROMcdb_playsgameps1 WHEREps.uid=ps1.uid ANDps1.gametag='chuansj' ANDFROM_UNIXTIME(ps1.dateline,'%Y%m%d')='20081008') GROUPBYps.uid ORDERBYcreditsDESC LIMIT0,50

像查询里:

ANDps.credits=(SELECTMAX(ps1.credits) FROM{$tablepre}playsgameps1whereps.uid=ps1.uidANDps1.gametag='$game' ANDFROM_UNIXTIME(ps1.dateline,'%Y%m%d')='$todaytime')

特别消耗时间

另外,像:

FROM_UNIXTIME(ps1.dateline,'%Y%m%d')='$todaytime'

这样的语句会导致索引无效,因为对每个dataline的值都需要用函数计算一遍,需要调整为:

Sql代码

ANDps1.dateline>=UNIX_TIMESTAMP('$todaytime')

//更改后
Sql代码

SELECTps.*,mf.*,m.username FROMcdb_playsgameps,cdb_memberfieldsmf,cdb_membersm,( SELECTps1.uid,MAX(ps1.credits)AScredits FROMcdb_playsgameps1 WHEREps1.gametag='chuansj' ANDps1.dateline>=UNIX_TIMESTAMP('20081008') GROUPBYps1.uid )ASt WHEREmf.uid=ps.uid ANDm.uid=ps.uid ANDps.gametag='chuansj' ANDps.credits=t.credits ANDps.uid=t.uid GROUPBYps.uid ORDERBYcreditsDESC LIMIT0,50

对于每个球员,找出球员号码,免费精选名字大全以及他所引起的罚款的号码,但只是针对那些至少有两次罚款的球员。

更紧凑的查询,在FROM子句中放置一个子查询。

Sql代码

SELECTPLAYERNO,NAME,NUMBER FROM(SELECTPLAYERNO,NAME, (SELECTCOUNT(*) FROMPENALTIES WHEREPENALTIES.PLAYERNO= PLAYERS.PLAYERNO) ASNUMBER FROMPLYERS)ASPN WHERENUMBER>=2

FROM子句中的子查询决定了每个球员的号码,免费精选名字大全和罚款的编号。接下来,这个号码变成了中间结果中的一列。然后指定了一个条件(NUMBER>=2);最后,获取SELECT子句中的列。

上述就是数据库技术:MYSQL子查询和嵌套查询优化实例解析分享的全部内容,如果对大家有所用处且需要了解更多关于mysql数据库学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/dtteaching/914605.html

(0)
上一篇 2021年10月29日
下一篇 2021年10月29日

精彩推荐