基本上有一些查询的性能问题,主要是我最大的表,其中包含调用数据.
主查询包含相当多的左连接和子选择,但在我正在运行查询的情况下,我希望返回1.3M调用,查询只是没有这样做.必须在7分钟停止它意味着某处肯定存在问题.
我缩小了主查询并测试了最简单的子选择连接
SELECT
DateStart,
ID,
NumbID,
EffectiveFlag,
OrigNumber
FROM calls
WHERE
DateStart <= '2013-12-31'
AND DateStart >= '2013-01-01'
AND CallLength >= '00:00:00'
AND Direction = '1'
AND CustID IN (474,482,250,268,197,604,132,359,279,441,118,448,152,133,380,162,249,679,226,259,2450,2408,2451,2453,2439,2454,2444,2445,2452)
Run Code Online (Sandbox Code Playgroud)
甚至该查询需要4.5s - 因此当它是具有其他连接和子选择的查询中的子选择时,我可以想象为什么整个查询不可用.
上述查询的解释声明是
+----+-------------+-------+-------+-------------------------------------------------------------------------------------------------------+----------------------+---------+------+---------+-------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+-------+-------------------------------------------------------------------------------------------------------+----------------------+---------+------+---------+-------------+
| 1 | SIMPLE | calls | range | idx_CustID,idx_DateStart,idx_CustID_DateStart,idx_CustID_TermNumber,idx_Direction | idx_CustID_DateStart | 7 | NULL | 1660009 | Using where | …Run Code Online (Sandbox Code Playgroud)