0
MySQL查詢優化我需要一些建議。更一般我在下面的例子說明: 我有MySQL的InnoDB表「崗位」與字段:與LIMIT,ORDER BY子句布爾和IN子句
`id` - INT UNSIGNED AUTOINCREMENT
`title` - VARCHAR(100)
`abstract` - TEXT #can be converted to VARCHAR(2048)
`content` - TEXT #text + thml tags
`category` - SMALLINT
`created_on` - DATETIME
`modified_on` - DATETIME
`enabled` - TINYINT(1)
`deleted` - TINYINT(1)
隨着inexes上
`id` - PRIMARY
`category` - INDEX
`modified_on` - INDEX
(`enabled`,`deleted`) - INDEX
表包含10-15萬元的紀錄。我正在查詢
SELECT id, title, abstract FROM posts
WHERE enabled = 1 AND deleted = 0
AND category IN ({id's})
ORDER BY modified_on DESC
LIMIT {offset}, {limit}
隨着50-100個併發請求到MySQL服務器它下降。 每個查詢在0.1-0.5s內執行,取決於限制條款。
我是否需要單獨的索引作爲'category',因爲有時我會瀏覽所有類別的所有帖子,或者我可以將'category'添加到(enabled
,deleted
)索引並每次傳遞所有類別的id(~200)我需要來自所有人的帖子嗎?
有什麼解決辦法可能會導致改善此類查詢的速度?
在此先感謝。
看看EXPLAIN語句,它應該幫助你獲得更多的信息,http://dev.mysql.com/doc/refman/5.5/en/using- explain.html。 – pedromarce 2013-03-05 12:55:34
你的'抵消'和'極限'有多大? – Quassnoi 2013-03-05 13:03:23
限制通常是10-100,並且偏移量可以是從0到10-15百萬的任何值。這是分頁,它被緩存了,但是每次修改後,'modified_on'都會改變。實際上'modified_on'最好調用'last_open_on'。因此,每當有人查看任何文章時,緩存就會失效 - 此後應該先分頁分頁。 – 2013-03-05 13:12:20