Mysql连接语句查询的优化

Mysql连接语句查询的优化,mysql,Mysql,此特定查询需要一分钟以上的时间。我希望能在更短的时间内完成 解释声明如下: SELECT GV.ID , XS.SymbolId , GS.ID , XS.SymbolExchangeId , XS.IssueId , GE.ID , XD.ACTIVE , XD.ExchangeId FROM TB_GDS_SECURITY GS , WSOD_Vanilla.WSOD_XrefIssueSymbols XS

此特定查询需要一分钟以上的时间。我希望能在更短的时间内完成

解释声明如下:

SELECT GV.ID
     , XS.SymbolId
     , GS.ID
     , XS.SymbolExchangeId
     , XS.IssueId
     , GE.ID
     , XD.ACTIVE
     , XD.ExchangeId 
  FROM TB_GDS_SECURITY GS
     , WSOD_Vanilla.WSOD_XrefIssueSymbols XS
     , WSOD_Vanilla.WSOD_XrefIssueData XD
     , TB_GDS_EXCHANGE GE
     , TB_GDS_VENDOR GV 
 WHERE XD.CompositeIssueID = GS.ISSUE_ID_TEMP 
   AND XD.IssueId = XS.IssueId 
   AND XD.ACTIVE = 'True' 
   AND GV.VENDOR_SHORT_NAME = XS.SymbolsetId 
   AND GE.EXCHANGE_SHORT_NAME = XD.ExchangeId 
   AND NOT EXISTS (SELECT ID 
                     FROM TB_GDS_VENDOR_VENUE_SYMBOL VVS
                    WHERE VVS.ISSUE_ID = XS.IssueId 
                      AND (SELECT ID 
                             FROM TB_GDS_VENDOR GV 
                            WHERE GV.VENDOR_SHORT_NAME = XS.SymbolsetId
                          )
                  );
优化后仍然需要大约1.35分钟来执行。
请帮助我。

根据其他地方的评论,您尚未向我们展示索引定义

此处的bog成本很可能是不存在的子条款。MySQL不能很好地处理推式预测,而且这里还有一个笛卡尔乘积。我很难理解这到底是怎么回事。MySQL(事实上我所熟悉的数据库管理系统中没有数据库管理系统)可以有效地为不存在或不相似的数据库使用索引。嵌套查询似乎不提供任何功能,因为在外部查询中,这些表之间已经存在显式联接:

mysql> EXPLAIN SELECT GV.ID, XS.SymbolId, GS.ID, XS.SymbolExchangeId, XS.IssueId, GE.ID, XD.ACTIVE, XD.ExchangeId FROM TB_GDS_SECURITY GS, WSOD_Vanilla.WSOD_XrefIssueSymbols XS, WSOD_Vanilla.WSOD_XrefIssueData XD, TB_GDS_EXCHANGE GE, TB_GDS_VENDOR GV WHERE XD.CompositeIssueID = GS.ISSUE_ID_TEMP AND XD.IssueId = XS.IssueId AND XD.ACTIVE = 'True' AND GV.VENDOR_SHORT_NAME=XS.SymbolsetId AND GE.EXCHANGE_SHORT_NAME = XD.ExchangeId AND NOT exists (SELECT ID FROM TB_GDS_VENDOR_VENUE_SYMBOL VVS
    -> WHERE VVS.ISSUE_ID = XS.IssueId AND (SELECT ID FROM TB_GDS_VENDOR GV WHERE GV.VENDOR_SHORT_NAME = XS.SymbolsetId)); 
+----+--------------------+-------+------+--------------------------------------------------------+-----------------------------+---------+----------------------------------+---------+------------------------------------+
| id | select_type        | table | type | possible_keys                                          | key                         | key_len | ref                              | rows    | Extra                              |
+----+--------------------+-------+------+--------------------------------------------------------+-----------------------------+---------+----------------------------------+---------+------------------------------------+
|  1 | PRIMARY            | XD    | ref  | WSOD_XrefIssueData_UINDX1,WSOD_XrefIssueData_INDX1     | WSOD_XrefIssueData_INDX1    | 21      | const                            | 3981788 | Using index condition; Using where |
|  1 | PRIMARY            | GE    | ref  | TB_GDS_EXCHANGE_INDX1                                  | TB_GDS_EXCHANGE_INDX1       | 63      | WSOD_Vanilla.XD.ExchangeId       |       1 | Using where; Using index           |
|  1 | PRIMARY            | GS    | ref  | TB_GDS_SECURITY_INDX1                                  | TB_GDS_SECURITY_INDX1       | 5       | WSOD_Vanilla.XD.CompositeIssueID |       1 | Using where; Using index           |
|  1 | PRIMARY            | XS    | ref  | PRIMARY                                                | PRIMARY                     | 8       | WSOD_Vanilla.XD.IssueId          |       1 | Using where                        |
|  1 | PRIMARY            | GV    | ref  | TB_GDS_VENDOR_INDX1                                    | TB_GDS_VENDOR_INDX1         | 62      | WSOD_Vanilla.XS.SymbolsetId      |       1 | Using where; Using index           |
|  2 | DEPENDENT SUBQUERY | VVS   | ref  | TB_GDS_VVENUE_SYMBOL_UINDX1,TB_GDS_VVENUE_SYMBOL_INDX2 | TB_GDS_VVENUE_SYMBOL_UINDX1 | 5       | WSOD_Vanilla.XS.IssueId          |       3 | Using where; Using index           |
|  3 | DEPENDENT SUBQUERY | GV    | ref  | TB_GDS_VENDOR_INDX1                                    | TB_GDS_VENDOR_INDX1         | 62      | WSOD_Vanilla.XS.SymbolsetId      |       1 | Using where; Using index           |
+----+--------------------+-------+------+--------------------------------------------------------+-----------------------------+---------+----------------------------------+---------+------------------------------------+
7 rows in set (0.01 sec)

除了连接之外,您唯一的筛选是“and XD.ACTIVE='True'”——如果此列只包含2/3的值,那么使用索引可能会非常低效。

首先,请参阅显式连接语法。您没有使用MySQL连接。索引定义和基数是什么?还有,考虑为相关表提供显示创建表语句-特别是WSODVANILLAL.WSODXXRFRESDATAATONE性能灾难是CARLLAID子查询中的Calelistic子查询
WHERE...AND GV.VENDOR_SHORT_NAME = XS.SymbolsetId...
AND NOT EXISTS ( [a condition] AND
   SELECT ID FROM TB_GDS_VENDOR GV 
   WHERE GV.VENDOR_SHORT_NAME = XS.SymbolsetId