我的应用程序中有一种情况。对于图表中的每个x轴点,我绘制了5个y轴值。要计算这5个值中的每一个,我需要进行4个不同的查询。也就是说,对于每个x轴点,我需要激发20个sql查询。MySql multiple选择批处理.net
现在,我需要在我的图表中绘制40个这样的点。它导致了一个可悲的表现,从数据库中获取所有数据需要花费将近一分钟的时间。 4个不同的查询中的每一个都由2个表之间的连接组成。一个只有6行。另一个接近10,000。 4个查询中的每一个都有不同的WHERE子句,因此它们是不同的查询。对于x轴中的每个点,只有where子句的值发生更改。
我已经尝试将每个4个查询合并成一个大字符串。基本上批量四个选择。这些再次按每个y轴值进行批处理。 因此,对于每个x轴点,我现在发射一个由20个不同的选择语句组成的大命令。
从技术上讲,我应该会经历一个很大的性能提升,对吧?而不是击中db 40x5x4 = 800次,我现在只击中了40次。但不是花60秒,而是花50-55秒......没有什么帮助。
我正在使用MySql 5.1和它的.Net连接器的6.1版本。
我该怎么做才能提高性能?
编辑:
其中4个查询如下:
SELECT
SUM(TIME_TO_SEC(TIMEDIFF(T1.col2, T1.col1))* T2.col1/(3600 *1000)) AS TotalTime
FROM Table T1
JOIN Table T2
ON T1.col3 = T2.col3
WHERE T1.col4 = 'i'
AND T1.col1 >= '2009-12-25 00:00:00'
AND T1.col2 <= '2009-12-26 00:00:00';
其他3个查询是类似的,只是where子句稍有变化。这组4个查询被激发5次。前三次对表T1和T2的连接,传入col4的不同值。接下来的两次针对表T3和T2的加入,为col4传递不同的值。这5个值是特定x轴点的y轴值。
所有这些查询返回的数据都是相同的格式。所以,我们尝试在所有这些查询中进行UNION ALL。没有实质性差异。然而,一个奇怪的事情是,在对表T1上的外键进行索引后(虽然它包含了一个十万条记录),查询使用索引,但是它们变慢了。有时候,查询会花费双倍的时间来返回数据。
您确定瓶颈在创建连接并通过电线获取数据吗?也许查询本身需要时间,你需要优化它们? – Oded 2010-02-05 11:42:57
@Oded,我认为我们已经通过将查询合并为一个来消除创建连接/获取数据瓶颈。所以,是的,查询本身需要时间,我正在寻找如何优化它们的帮助:) – 2010-02-10 05:17:40