Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 优化内部联接_Sql_Join_Query Optimization_Inner Join - Fatal编程技术网

Sql 优化内部联接

Sql 优化内部联接,sql,join,query-optimization,inner-join,Sql,Join,Query Optimization,Inner Join,我需要一些查询优化方面的帮助。我有一个查询运行12秒的时间太长了,我希望能得到一些帮助来优化它,因为我不是sql专家。这是: SELECT ID , user_login , user_nicename , user_register

我需要一些查询优化方面的帮助。我有一个查询运行12秒的时间太长了,我希望能得到一些帮助来优化它,因为我不是sql专家。这是:

SELECT   ID                                          ,
         user_login                                  ,
         user_nicename                               ,
         user_registered                             ,
         user_status                                 ,
         display_name                                ,
         t1.meta_value             AS account_type    ,
         1 t2.meta_value           AS views           ,
         GROUP_CONCAT(t4.term_id)  AS interests_skills,
         GROUP_CONCAT(t4.taxonomy) AS taxonomyComb    ,
         t4.term_id                                   ,
         t4.taxonomy
FROM     wp_users
         INNER JOIN wp_usermeta AS t1
         ON       (
                           t1.user_id = wp_users.ID
                  AND
                           (
                                    t1.meta_key   = 'account_type'
                           AND      t1.meta_value = 'individual'
                           )
                  )
         LEFT JOIN wp_usermeta AS t2
         ON       (
                           t2.user_id  = wp_users.ID
                  AND      t2.meta_key = 'views'
                  )
         LEFT JOIN wp_term_relationships AS t3
         ON       (
                           t3.object_id = (1000000+wp_users.ID)
                  )
         INNER JOIN wp_term_taxonomy AS t4
         ON       (
                           (
                                    t3.term_taxonomy_id = t4.`term_taxonomy_id`
                           AND      t4.taxonomy         = 'category'
                           AND      t4.term_id IN (396,410,411,416,142,417)
                           )
                  OR
                           (
                                    t3.term_taxonomy_id = t4.`term_taxonomy_id`
                           AND      t4.taxonomy         = 'skill'
                           AND      t4.term_id IN (461,463,464,466,490,468,470,491,473,474,475)
                           )
                  )
WHERE    t4.term_id IS NOT NULL
GROUP BY ID LIMIT 0,10
下面是解释

1简单t4范围主分类法,术语id分类法,分类法术语id分类法106 NULL 17使用where;使用临时设备;使用文件排序

1个简单t1参考用户id,元密钥元密钥768常量3773,使用where

1个简单wp_用户eq_ref小学8 jasper_gi.t1.user_id 1

1个简单t2参考用户id,元密钥元密钥768常量2

1简单t3 eq_ref PRIMARY,term_taxonomy_id PRIMARY 16 func,jasper_gi.t4.term_taxonomy_id 1使用where;使用索引


我喜欢SQL的布局-非常容易阅读

每当我遇到这样的问题,我都会设法解决。从没有所有联接的基表开始,看看它是如何执行的——查看查询计划、验证结果等


然后每次加入一个,直到你看到罪犯。可能是一些索引的混合,可能是一些缺少的索引,等等。但是通过像这样系统地处理连接,您可以找到问题点并更好地了解该怎么做。

攻击的第一条线是索引:您是否在上定义了复合索引:

t2/wp_usermeta: (user_id, meta_key)
t3/wp_term_relationships: (objectid)
t4/wp_term_taxonomy: (term_taxonomy_id, taxonomy, term_id)

在加入字段中添加索引会有所帮助:

  • wp_usermeta.user_id
  • wp_users.ID
  • wp_term_relationships.objectid
  • wp_term_taxonomy.term_taxonomy_id
  • wp_术语_分类法
  • wp_term_taxonomy.term_id

我修复了查询格式。查看编辑历史记录,如果您没有这样做,我可能会无意中删除一句话!如果需要,请检查并重新添加。