目前,我的数据库查询速度很慢 - 查询时间从 0.0005 秒到 70 秒不等。
目前我的内容表结构如下:
如果不存在“内容”,则创建表( `content_id` int(11) NOT NULL AUTO_INCREMENT, `content_url` 文本不为空, `content_text` 文本不为空, `seed_id` int(11) NOT NULL, `created_at` bigint(20) 非空, `image` varchar(2000) 默认为空, `price` varchar(300) 默认为空, 主键(`content_id`), 唯一键 `CONTENT_TEXT_UNIQUE` (`content_text`(255)), KEY `FK_SEED_CODE`(`seed_id`), KEY `CONTENT_TEXT_TIME_INDEX` (`content_text`(255),`created_at`) ) 引擎=InnoDB 默认字符集=utf8 AUTO_INCREMENT=111357870 ; 更改表`内容` 添加约束 `FK_SEED_ID` 外键 (`seed_id`) 参考 `seed` (`seed_id`) ON DELETE CASCADE ON UPDATE CASCADE;
目前我对数据库只有 2 个查询:
选择 seed.seed_code,content.content_id 作为 id, content.content_url, content.content_text, content.created_at, content.image, content.price FROM content 左加入种子 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 seed WHERE storage_id ='.$storage.') '.$filter.' ORDER BY content.content_id DESC, content.created_at DESC LIMIT 50
和
选择 seed.seed_code,content.content_id 作为 id, content.content_url, content.content_text, content.created_at, content.image, content.price FROM content 左加入种子 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 seed WHERE storage_id ='.$storage.') ORDER BY content.content_id DESC, content.created_at DESC LIMIT 50
表种子包含 ± 20 个条目。大多数情况下不会改变。
在内容表上创建的索引似乎不起作用,因为我的加载时间仍然很长。
DB有什么改进之处?
更新 1
内容表包含大约 100 万个条目,并且每天都会以 1-2k 个条目增长。
$filter 变量包含额外的过滤器。所以还有一些其他的 AND 语句,它们是根据用户输入随机生成的。但它只过滤 content.text 和 created_at 日期。