这是一个奇怪的。我试图在MySQL中使用视图(我对MySQL有相当的新意,并且有更多的Sybase和SQL Server的经验)。任何方式这个新项目我们使用MySQL,因为它似乎有良好的性能。然而,为了更简单地查询网络前端,我们决定创建一些视图,一切运行良好,但它们需要永远运行。MySQL - 视图 - 超慢查询
意见非常简单,只需选择语句(这些表确实有几百万行)。例如说这个查询:
SELECT CAST(classifier_results.msgDate as DATE) AS mdate
,classifier_results.objClass AS objClass
,COUNT(classifier_results.objClass) AS obj
,classifier_results.subjClass AS subjClass
,COUNT(classifier_results.subjClass) AS subj
FROM classifier_results
WHERE (classifier_results.msgDate >= (curdate() - 20))
GROUP BY
CAST(classifier_results.msgDate as DATE)
,classifier_results.objClass
,classifier_results.subjClass
ORDER BY classifier_results.msgDate DESC
当作为一个正常选择运行需要大约1.5秒返回结果。
然而,当这个查询放入视图(原样) - 即
CREATE VIEW V1a_sentiment_AI_current AS
SELECT CAST(classifier_results.msgDate as DATE) AS mdate
,classifier_results.objClass AS objClass
,COUNT(classifier_results.objClass) AS obj
,classifier_results.subjClass AS subjClass
,COUNT(classifier_results.subjClass) AS subj
FROM classifier_results
WHERE (classifier_results.msgDate >= (curdate() - 20))
GROUP BY
CAST(classifier_results.msgDate as DATE)
,classifier_results.objClass
,classifier_results.subjClass
ORDER BY classifier_results.msgDate DESC
查询需要大约10倍的时间(22-30秒)。所以我想也许有一些优化或查询缓存,不适用于视图或可能有一些我们已经错过了在MySQL配置设置。但是有什么办法可以加速这个视图,所以它只是这个查询的一个很好的占位符?
运行EXPLAIN在两个查询: 正常的选择给出了:
1,操作简便,classifier_results,ALL,idx_date,,,,594845,使用其中;使用临时;使用文件排序
的视图中选择给出:
1,PRIMARY,ALL,,,,,100,
2,衍生classifier_results,ALL,idx_date,,,,594845,使用哪里;使用临时;使用文件排序
+0
如果在查看和从视图中选择时使用EXPLAIN,你会得到不同的结果吗? –
+0
已添加到问题中。查询计划看起来是一样的,即时假设eprimary只是从视图返回,因为它是嵌套在某种意义上,没有什么可以指示20秒+额外运行.... –
+1
我认为'DERIVED'意味着它正在使用一个临时表,这是杀害性能 –