Re: [SQL ] 有請資料庫高手MYSQL order by 的問題
我剛剛從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
08/17 19:47, 1F
推
08/17 21:40, , 2F
08/17 21:40, 2F
推
08/19 21:19, , 3F
08/19 21:19, 3F
推
08/20 16:57, , 4F
08/20 16:57, 4F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):