0

アドバイスが必要です。より一般的にするために、次の例で説明します。フィールドを持つ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) を渡すことができますか?そのうちの?

このようなクエリの速度を向上させるには、どのようなソリューションを使用できますか?

前もって感謝します。

4

1 に答える 1

1

「有効」と「削除済み」を含むカテゴリをインデックスに追加する必要があると思います。

クエリ時間が短縮されることを願っています

于 2013-03-05T12:50:27.270 に答える