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子查询和嵌套查询优化实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以参阅:mysqlin语句子查询效率慢的优化技巧示例、浅谈mysql的子查询联合与in的效率等,如有不足之处请留言,小编会及时更正。
感谢朋友们对毛票票网站的支持!