我正在使用django创建一个网站。为了进行测试,我创建了一个包含100万行的数据库,每行包含有关我网站上图像的信息(上传者,方向,描述和其他一些)。每个图像都有多个标签,这些标签存储在标签关系数据库中。 表被索引。
标记关系数据库 id
tag_id
=标记表的外键
Tag_relation
=图像表的外键(100万行)
现在,我正在提供一个页面,用户可以使用标记和图像行中的其他参数(如上传器等)搜索图像。
现在这是我正在运行的用于创建搜索列表的查询。
SELECT * FROM photos_main_tb,photos_tag_relation
WHERE photos_main_tb.id=photos_tag_relation.relation_id ORDER BY photos.rating LIMIT 0,10
现在我工作得很好,给我的照片。但随着极限变大,所用的时间会稳步增加并变为几秒钟。
SELECT * FROM photos_main_tb,photos_tag_relation
WHERE photos_main_tb.id=photos_tag_relation.relation_id ORDER BY photos.rating LIMIT 500000,10
我可以做的一个优化是子查询并指定限制LIke
SELECT * FROM (photos_main_tb LIMIT 200,000,800000) ,photos_tag_relation
WHERE photos_main_tb.id=photos_tag_relation.relation_id ORDER BY photos.rating LIMIT
0,10
但这并没有真正解决我的问题。我希望能够像这个网站一样列出:http://airteamimages.com/search.php。它不会因许多图像而变慢。我是mysql的新手。原谅任何错误。我希望能够在毫秒内加载搜索中的每个页面,就像第一个查询一样。
更新: 就像第一个评论一样,我将停止选择*而不是仅仅是id,这真的加速了事情。但是还有其他一些技巧吗?这个代码值得生产网站使用吗?