現在、DB へのクエリが遅いという問題があります。クエリ時間は 0.0005 秒から 70 秒までさまざまです。
現在、コンテンツを含む私のテーブル構造は次のとおりです。
CREATE TABLE IF NOT EXISTS `content` ( `content_id` int(11) NOT NULL AUTO_INCREMENT, `content_url` テキスト NOT NULL, `content_text` テキスト NOT NULL, `seed_id` int(11) NOT NULL, `created_at` bigint(20) NOT NULL, `image` varchar(2000) DEFAULT NULL, `price` varchar(300) DEFAULT NULL, 主キー (`content_id`)、 UNIQUE KEY `CONTENT_TEXT_UNIQUE` (`content_text`(255)), KEY `FK_SEED_CODE` (`seed_id`), KEY `CONTENT_TEXT_TIME_INDEX` (`content_text`(255),`created_at`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=111357870 ; ALTER TABLE `コンテンツ` ADD CONSTRAINT `FK_SEED_ID` FOREIGN KEY (`seed_id`) REFERENCES `seed` (`seed_id`) ON DELETE CASCADE ON UPDATE CASCADE;
現在、データベースへのクエリは 2 つしかありません。
コンテンツから id、content.content_url、content.content_text、content.created_at、content.image、content.price として、seed.seed_code、content.content_id を選択します。 LEFT JOIN シード ON content.seed_id = seed.seed_id WHERE seed.seed_switch = 1 AND seed.seed_status_id = 3 AND seed.seed_id in ( SELECT seed_id FROM シード WHERE storage_id ='.$storage.') '.$filter.' ORDER BY content.content_id DESC、content.created_at DESC LIMIT 50
と
コンテンツから id、content.content_url、content.content_text、content.created_at、content.image、content.price として、seed.seed_code、content.content_id を選択します。 LEFT JOIN シード ON content.seed_id = seed.seed_id WHERE seed.seed_switch = 1 AND seed.seed_status_id = 3 AND seed.seed_id in ( SELECT seed_id FROM シード WHERE storage_id ='.$storage.') ORDER BY content.content_id DESC, content.created_at DESC LIMIT 50
テーブル シードには ± 20 エントリが含まれます。ほとんど変わらないもの。
コンテンツ テーブルに作成されたインデックスが機能していないようです。まだロード時間が非常に長いためです。
DBの改善点は何ですか?
更新 1
コンテンツ テーブルには約 100 万のエントリが含まれており、毎日 1 ~ 2,000 のエントリで増加しています。
$filter 変数には、追加のフィルターが含まれています。したがって、ユーザー入力に応じてランダムに生成される他のいくつかの AND ステートメント。ただし、content.text と created_at の日付のみをフィルタリングします。