mysql查询视图数据慢_MySQL - 视图 - 超慢查询

这是一个奇怪的。我试图在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'意味着它正在使用一个临时表,这是杀害性能 –

你可能感兴趣的:(mysql查询视图数据慢)