Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.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
Mysql 如何优化此sql查询(内部联接)_Mysql_Optimization_Query Optimization - Fatal编程技术网

Mysql 如何优化此sql查询(内部联接)

Mysql 如何优化此sql查询(内部联接),mysql,optimization,query-optimization,Mysql,Optimization,Query Optimization,无论如何,是否有优化此查询的方法。执行此查询需要40多秒。我尝试了许多方法,如创建索引。这几乎没有帮助。但查询时间太长 SELECT b.id, Count(DISTINCT a.id, c.chapters_id) AS pct, Count(DISTINCT e.id) AS eCount, Count(DISTINCT f.id) AS fCount, Count(DISTINCT d2.id)

无论如何,是否有优化此查询的方法。执行此查询需要40多秒。我尝试了许多方法,如创建索引。这几乎没有帮助。但查询时间太长

 SELECT b.id,
   Count(DISTINCT a.id, c.chapters_id) AS pct,
   Count(DISTINCT e.id)                 AS eCount,
   Count(DISTINCT f.id)                 AS fCount,
   Count(DISTINCT d2.id)                 AS d2Count,
   b.NAME,
   e.NAME,
   e.address2,
   f.NAME,
   d2.is_active
FROM   tableA a
       INNER JOIN tableB b
               ON a.modules_id = b.id
       INNER JOIN tableC c
               ON a.modules_id = c.modules_id
       INNER JOIN tableD d1
               ON d1.id = b.store_users_id 
       INNER JOIN tableD d2
               ON d2.id = a.store_users_id
       INNER JOIN tableE e
               ON e.id = d2.stores_id
       INNER JOIN tableF f
               ON e.city = f.id
WHERE  b.type IN( 1, 2, 4 )
       AND b.organizations_id = 156
       AND b.is_enable = true
GROUP  BY b.NAME,b.id
说明

   +----+-------------+-------+--------+-----------------------------------------------------------------------------------------------------+-----------------------------+---------+--------------------------+------+---------------------------------------+
| id | select_type | table | type   | possible_keys                                                                                       | key                         | key_len | ref                      | rows | Extra                                 |
+----+-------------+-------+--------+-----------------------------------------------------------------------------------------------------+-----------------------------+---------+--------------------------+------+---------------------------------------+
|  1 | SIMPLE      | b     | range  | PRIMARY,fk_modules_organizations1,fk_modules_store_users1,sort_modules_name,wh_modules_type,new_idx | new_idx                     | 9       | NULL                     |  160 | Using index condition; Using filesort |
|  1 | SIMPLE      | c     | ref    | fk_module_chapters_modules1                                                                         | fk_module_chapters_modules1 | 4       |         b.id             |    1 | NULL                                  |
|  1 | SIMPLE      | d1    | eq_ref | PRIMARY                                                                                             | PRIMARY                     | 4       |         b.store_users_id |    1 | Using index                           |
|  1 | SIMPLE      | a     | ref    | store_users_id_UNIQUE,fk_user_modules_store_users1,fk_user_modules_modules1                         | fk_user_modules_modules1    | 4       |         b.id             |  149 | NULL                                  |
|  1 | SIMPLE      | d2    | eq_ref | PRIMARY,fk_store_users_stores1                                                                      | PRIMARY                     | 4       |         a.store_users_id |    1 | NULL                                  |
|  1 | SIMPLE      | e     | eq_ref | PRIMARY,Stores-Cities                                                                               | PRIMARY                     | 4       |        d2.stores_id      |    1 | Using where                           |
|  1 | SIMPLE      | f     | eq_ref | PRIMARY                                                                                             | PRIMARY                     | 4       |         e.city           |    1 | NULL                                  |
+----+-------------+-------+--------+-----------------------------------------------------------------------------------------------------+-----------------------------+---------+--------------------------+------+---------------------------------------+
这可能有助于:

INDEX(organizations_id, is_enable, type) -- on b
由于您说的是
COUNT(DISTINCT…
,闻起来好像
连接正在爆炸行数,然后您正在
将它们区分回它们应该在的位置。一种方法是从中执行
选择COUNT(*)。。。加入…
而不使用最后的
分组依据。如果这是一个比任何表大小都大得多的数字,那么您就遇到了这个经典问题

有时,解决方法是将
连接替换为

SELECT  ...,
        ( SELECT COUNT(*) FROM x ... )  AS x_ct,  -- instead of `JOIN x`
        ... 
这可能有助于:

INDEX(organizations_id, is_enable, type) -- on b
由于您说的是
COUNT(DISTINCT…
,闻起来好像
连接正在爆炸行数,然后您正在
将它们区分回它们应该在的位置。一种方法是从中执行
选择COUNT(*)。。。加入…
而不使用最后的
分组依据。如果这是一个比任何表大小都大得多的数字,那么您就遇到了这个经典问题

有时,解决方法是将
连接替换为

SELECT  ...,
        ( SELECT COUNT(*) FROM x ... )  AS x_ct,  -- instead of `JOIN x`
        ... 

请为您的表提供
SHOW CREATE TABLE tablename
语句。这将帮助我们识别任何不正确的数据类型,并查看您有哪些索引。另外,
中的
总是只有3个值,还是有所不同?这些价值观从何而来?(即用户输入或以前运行的查询等)您好,感谢您查看我的查询。在中,始终只有3个值(1,2,4)。显示5个表的创建表详细信息太大了。请告诉我,如果你需要显示创建任何特定表表。Thnksy您没有得到任何回复,因为您没有提供明确的信息。提供所有SHOW CREATE TABLE语句,除非您的雇主或类似人士禁止您这样做,否则请更正查询以显示实际的表名和列名,而不是这些假名称。它有助于我们的理解,并降低您在编辑名称时出错的风险。我们可以从EXPLAIN语句中的
*\u id
列和键推断出大多数名称。请为您的表提供
SHOW CREATE TABLE tablename
语句。这将帮助我们识别任何不正确的数据类型,并查看您有哪些索引。另外,
中的
总是只有3个值,还是有所不同?这些价值观从何而来?(即用户输入或以前运行的查询等)您好,感谢您查看我的查询。在中,始终只有3个值(1,2,4)。显示5个表的创建表详细信息太大了。请告诉我,如果你需要显示创建任何特定表表。Thnksy您没有得到任何回复,因为您没有提供明确的信息。提供所有SHOW CREATE TABLE语句,除非您的雇主或类似人士禁止您这样做,否则请更正查询以显示实际的表名和列名,而不是这些假名称。它有助于我们的理解,并降低您在编辑名称时出错的风险。我们可以从EXPLAIN语句中的
*\u id
列和键推断出大多数名称。