Mysql 是否可以使此SQL查询更快?

Mysql 是否可以使此SQL查询更快?,mysql,Mysql,只是想知道是否有可能使这个查询更快?或者是否有其他类似的查询可以更好地工作 从帖子中选择id、来源 其中id=ANYSELECT image\u id FROM`post\u tags`WHERE tag\u id=SELECT id FROM`tags`WHERE tag=\u utf8'$tag'collate utf8\u bin 和posts.exists='n' 按邮政订购。费率计数说明 上限0100 在不使用以下命令的情况下: 和posts.exists='n' 邮购 描述限值010

只是想知道是否有可能使这个查询更快?或者是否有其他类似的查询可以更好地工作

从帖子中选择id、来源 其中id=ANYSELECT image\u id FROM`post\u tags`WHERE tag\u id=SELECT id FROM`tags`WHERE tag=\u utf8'$tag'collate utf8\u bin 和posts.exists='n' 按邮政订购。费率计数说明 上限0100 在不使用以下命令的情况下:

和posts.exists='n' 邮购 描述限值0100 它加快了查询到可用级别的速度,但在我所做的工作中需要这样做

Tags表具有“tag”和“id”的唯一索引。 标记有83K行。 Post_标记具有“image_id”、“tag_id”的唯一索引。也为每个正常指数。 Post_标记有471K行。 Posts具有“id”的唯一索引。还有“exists”和“ratecont”的正常索引。 Posts表大约有110万行。
你的标签桌是什么样子的?它是否只包含ID和标记字段?我将在TAGTAG,ID上创建一个唯一的索引,这样最内部的查询只搜索一个索引

邮政标签表呢?它只是标记ID和图像ID的组合吗?同样,我会在POST_TAGSIMAGE_ID,TAG_ID上创建一个唯一的索引

需要注意的是,索引中字段的顺序很重要,POST_TAGSTAG_ID,IMAGE_ID上的索引与解析计划中使用的POST_TAGSIMAGE_ID,TAG_ID上的索引差别很大

在POSTS表中,POSTSID上有一个唯一的索引,POSTS,ratecount可以帮助您,我知道它是一个冗余索引,并且在插入、更新和删除时会产生额外的成本,但它会在这个查询中帮助您


顺便说一下,在内部查询中使用联接可能会提高性能,只需检查一下。

按照某人的建议,使用联接成功地使其工作

从帖子中选择* 在post_tags.image_id=posts.id上左连接post_标签 在post_tags.tag_id=tags.id上连接标签 其中tags.tag=\u utf8'$tag'整理utf8\u bin 和posts.exists='n' 按邮政订购。费率计数说明 上限0100
从22秒减少到0.26秒。

表post和post_标记中有多少数据?您是否设置了所有必要的索引?查询计划显示了什么?实际使用的是指数吗?根据正常连接进行重写会有所不同吗?有时计划者会胡思乱想。表格统计数据是否更新?无论如何,把所有信息都放在原来的帖子里。也可以试试DBA。投票关闭因为太本地化了。如果您可以将其重新构造为使用JOIN而不是sub SELECT,您应该可以获得一些速度。如果ORDER被认为是罪魁祸首,我不会感到惊讶。如果他发布解释会很好,很可能会导致文件排序。Tag表包含id/Tag/tagcount。已经为POST_TAGSIMAGE_ID、TAG_ID创建了唯一索引。