Re: [SQL ] 有請資料庫高手MYSQL order by 的問題

看板Database作者 (brain)時間17年前 (2008/08/17 19:36), 編輯推噓4(400)
留言4則, 4人參與, 最新討論串4/4 (看更多)
我剛剛從6秒多 降到 0.07秒 原來設定索引不要個別設定 設定成 多欄位的那種索引會比較快 快了大概一半 然後再多設定一點條件 降低她整張表的搜尋 效果一樣 從 6秒降到0.07 SQL SELECT p.ishtar_id, p.name, count( a2.aid ) AS count FROM ishtar_profiles AS p INNER JOIN ( `answer` AS a1 INNER JOIN `answer` AS a2 ON a1.ishtar_id != a2.ishtar_id AND a1.qid = a2.qid AND a1.answer = a2.answer ) ON p.ishtar_id = a2.ishtar_id WHERE p.status = '開放中' AND p.pic = 'Y' AND p.sex =1 AND ( ( p.age >= ( SELECT avg( p2.age ) -5 AS age FROM friend AS f2 INNER JOIN ishtar_profiles AS p2 ON f2.friend_id = p2.ishtar_id AND p2.age !=0 WHERE f2.ishtar_id =00000001 ) AND p.age <= ( SELECT avg( p2.age ) +5 AS age FROM friend AS f2 INNER JOIN ishtar_profiles AS p2 ON f2.friend_id = p2.ishtar_id AND p2.age !=0 WHERE f2.ishtar_id =00000001 ) ) OR p.age =0 ) AND a1.ishtar_id IN ( SELECT friend_id AS ishtar_id FROM friend WHERE ishtar_id =00000001 ) AND a2.ishtar_id NOT IN ( SELECT friend_id AS ishtar_id FROM friend WHERE ishtar_id =00000001 ) GROUP BY p.ishtar_id ORDER BY `count` DESC , p.update DESC LIMIT 10 ※ 引述《starjou (周星星)》之銘言: : 沒有辦法 index 的資料要當 order by key,效能大受影響是可想而知的了。 : 其實我想推文的,可是還要等很多很多秒。 : 現在想到的方法是把 group 出來的資料 insert 到某個設好 index 的 : temporary table,然後再排序,不過這樣省了 order by 非索引欄位的時間, : 又多了 insert 的 I/O 時間。 : (或是能用暫存在記憶體的 temporary table,如果 ram 夠的話?) : 如果你有去試的話跟我說一下結果怎麼樣?(看能不能真的試個幾十萬筆的資料) : 看有沒有高手有高招了..... -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 219.84.230.9

08/17 19:47, , 1F
眼花了 XD
08/17 19:47, 1F

08/17 21:40, , 2F
建議不要用NOT IN去做比對 資料量越多效率越囧
08/17 21:40, 2F

08/19 21:19, , 3F
你要不要直接貼個範例資料出來看 跟你要撈什麼資料
08/19 21:19, 3F

08/20 16:57, , 4F
把NOT的東西全部去掉,改個方式去寫,不然會佔用一堆時間
08/20 16:57, 4F
文章代碼(AID): #18g0qfC4 (Database)
討論串 (同標題文章)
文章代碼(AID): #18g0qfC4 (Database)