国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

MYSQL子查詢和嵌套查詢優化實例解析

2024-07-24 13:14:41
字體:
來源:轉載
供稿:網友

查詢游戲歷史成績最高分前100

Sql代碼

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; 

Sql代碼

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; 

執行時間僅為0.22秒,比原來的25秒提高了10000倍

查詢當天游戲最好成績

Sql代碼

 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' 

這樣的語句會導致索引無效,因為對每個dataline的值都需要用函數計算一遍,需要調整為:

Sql代碼

AND ps1.dateline >= UNIX_TIMESTAMP('$todaytime')  

//更改后
Sql代碼

 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子句中放置一個子查詢。

Sql代碼

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子句中的列。

總結

以上就是本文關于MYSQL子查詢和嵌套查詢優化實例解析的全部內容,希望對大家有所幫助。如有不足之處請留言,小編會及時更正。感謝朋友們對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 长阳| 泽州县| 南皮县| 商城县| SHOW| 留坝县| 海原县| 龙口市| 河间市| 瑞金市| 龙门县| 乐平市| 靖远县| 泰州市| 珲春市| 武清区| 黄浦区| 山丹县| 舟山市| 柳河县| 子洲县| 双鸭山市| 仲巴县| 信阳市| 黔西县| 金溪县| 宁明县| 大港区| 高碑店市| 南涧| 鄂伦春自治旗| 邯郸县| 客服| 宾川县| 雷波县| 新乐市| 永吉县| 徐州市| 九寨沟县| 祁连县| 大名县|