【问题标题】:sql many-to-many query indexes optimizationsql多对多查询索引优化
【发布时间】:2011-12-31 23:01:39
【问题描述】:

我有一个要优化的多对多查询, 我应该为它创建什么索引?

  SELECT (SELECT COUNT(post_id) 
            FROM posts 
           WHERE post_status = 1) as total,
         p.*,
         GROUP_CONCAT(t.tag_name) tagged
    FROM tags_relation tr  
    JOIN posts p ON p.post_id = tr.rel_post_id  
    JOIN tags t ON t.tag_id = tr.rel_tag_id
   WHERE p.post_status=1
GROUP BY p.post_id

解释

id  select_type table   type    possible_keys   key key_len ref rows    Extra
1   PRIMARY     p   ALL PRIMARY NULL    NULL    NULL        5   Using where; Using filesort

【问题讨论】:

    标签: mysql sql indexing query-optimization


    【解决方案1】:

    您可以使用Explain 语句查看查询执行计划。这将显示是否正在发生全表扫描,或者它是否能够找到索引来检索数据。从那时起,您可以进一步优化。

    编辑

    根据您的查询执行计划,第一个优化步骤检查您的表是否定义了主键,您可以在 post_status 和 tag_name 列上设置索引。

    【讨论】:

    • 这里是结果 PRIMARY,post_status post_status 1 const 4 using where;使用文件排序
    • 现在您的查询以 post_status 作为键,不像您之前的执行计划是 NULL。
    • 是的,但我仍然收到“使用位置;使用文件排序”
    猜你喜欢
    • 2023-03-04
    • 2012-08-05
    • 1970-01-01
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多