好的,我有一個查詢,我似乎無法得到優化。也許我在MySQL中做得太多了,應該更多地委託給PHP。這樣的查詢需要一分鐘左右,但我真的需要它比這更快。下面是一個假設的結構,應該讓你知道我正在努力完成什麼。查詢性能問題。我可以優化這個嗎?
您會注意到我正在向PHP變量$ bookList提供查詢,該變量包含當前用戶擁有的book_id列表,格式爲逗號分隔格式。
對於這個例子,假設用戶有70個book_id被分配給他的圖書館($ bookList),他想知道哪些商店與他的圖書館共享最多的圖書。每家商店有70本書,但有20多萬商店。少於50%的商店將被過濾掉。
表1:my_books
id: mediumint
book_id: smallint
表2:store_books
store_id: mediumint
book_id: smallint
index: store_id
index: book_id
表3;商店
id: mediumint
name: varchar(50)
primary: id
查詢:
SELECT count(s.book_id) AS commonBooks, s.id
FROM store_books AS sb
INNER JOIN stores AS s ON s.id = sb.id
WHERE sb.book_id IN ($bookList)
GROUP BY sb.store_id
HAVING commonBooks > 35
ORDER BY commonBooks
提前感謝!
你的意思是sb.id在內部連接上是sb.store_id嗎? –
我認爲你需要一個表'store_books'中的複合索引。 on'(store_id,book_id)' –
您還應該用'count(*)'替換'count(s.book_id)'' –