此SQL查詢令我厭惡。我沒有寫它,但這是我們服務器上的一個大問題。我願意將它分成多個查詢,並通過PHP進行一些處理(如RAND())。優化此SQL查詢
$sql = "SELECT a.code, a.ad_id, a.position, a.type, a.image, a.url, a.height, a.width
FROM " . AD_TABLE ." a, " . USER_GROUP_TABLE . " g
WHERE (a.max_views >= a.views OR a.max_views = '0')
AND (FIND_IN_SET(" .$forum_id. ", a.show_forums) > 0 OR a.show_all_forums = '1')
AND g.user_id = " . $user->data['user_id'] . "
AND FIND_IN_SET(g.group_id, a.groups)
AND FIND_IN_SET(" . $user->data['user_rank'] . ", a.ranks)
AND a.start_time < " . time() . "
AND a.end_time > " . time() . "
AND (a.clicks <= a.max_clicks OR a.max_clicks = '0')
ORDER BY rand()";
Yeesh,我覺得噁心粘貼,經過...
編輯:下面是對上面的格式樣本查詢「解釋」的結果,逗號分隔:
"id","select_type","table","type","possible_keys","key","key_len","ref","rows","Extra"
1,"SIMPLE","g","ref","user_id","user_id","3","const",6,"Using temporary; Using filesort"
1,"SIMPLE","a","ALL","max_views","","","",10,"Using where"
這是
你問的問題,或試圖獲得一些SQL優化而不付錢? – Mathew 2009-06-30 14:31:30
你介意做一個EXPLAIN SELECT併發布結果嗎? – alexn 2009-06-30 14:34:59