アドバイスが必要です。より一般的にするために、次の例で説明します。フィールドを持つMySQL InnoDBテーブル「投稿」があります。
`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
テーブルには、1,000 万から 1,500 万のレコードが含まれています。クエリを実行しています
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}
MySQL サーバーへの 50 ~ 100 の同時要求でダウンします。各クエリは 0.1 ~ 0.5 秒で実行され、制限句によって異なります。
すべてのカテゴリのすべての投稿をブラウズすることがあるため、「カテゴリ」に個別のインデックスが必要ですか、それとも「カテゴリ」を ( enabled
, deleted
) インデックスに追加して、すべての投稿が必要になるたびにすべてのカテゴリの ID (~200) を渡すことができますか?そのうちの?
このようなクエリの速度を向上させるには、どのようなソリューションを使用できますか?
前もって感謝します。