有一个相当简单的系统:
articles
表,tags
表,article_tags
表,其中包含标记的ID及其分配的文章。
当我想要获取所有文章及其所有标签的列表时,我必须进行一些GROUP_CONCAT()
查询以获得逗号分隔的标签列表,我可以拆分并显示
加载大页面的速度越来越慢,我担心这不是最好的方法。我asked a question最近关于获取具有特定标记的所有文章,并最终使用双连接获得解决方案。此查询运行速度很快,但“常规”查询(例如,抓取最新的10篇文章及其所有标签)最多需要1秒才能运行。
我的表编制得很好,其他查询运行得很快。这种SQL结构有更好的方法/设计模式吗?任何提示都非常有用。
谢谢, 马特
答案 0 :(得分:2)
表结构是正确的,最好的方法是使用EXPLAIN语法分析查询的执行计划,如果需要帮助,请将其发布。
答案 1 :(得分:0)
尝试返回group_concat中的所有标记几乎肯定是瓶颈。
是否存在按正确顺序返回所有行并重复文章的问题?
答案 2 :(得分:0)
也许你可以通过在文章表的另一个字段中预先计算group_concat并在其上添加FULLTEXT索引来使系统加倍。
我不确定表演会是什么,但这很容易尝试。简单的查询将在通常的过程中运行(这将保持更快),并且更复杂的可以以这种方式运行(这将比连接更快)。