VB.NET MySqlDataAdapter.Fill需要大约6-7秒

时间:2012-05-13 15:58:14

标签: mysql vb.net

我在一个大约1,500行的表的存储过程中运行一个简单的SELECT(如下所述)。

CREATE PROCEDURE `LoadCollectionItemProperty`(IN sId int(10))
BEGIN
SELECT *
FROM itemproperty
WHERE itemid IN
    (SELECT itemid
    FROM collectionitem
    WHERE collectionid = sId AND removed ='0000-00-00 00:00:00');
END 

此操作大约需要7秒钟。我插入断点并使用F11确定在MySqlAdapter.Fill是滞后开始的位置。我的计算机和托管MySQL数据库的服务器都没有受到规范的挑战。我猜这是查询本身。

collectionitem包含将itemproperty链接到集合的2个外键。我们提供了sproc sId(集合的PK),以便子查询返回特定集合中的所有itemid,然后我们在itemproperty中使用itemid(PK)。

有没有办法加快这个过程?

更新

我的问题完全是由于索引不当造成的。一旦我了解了要索引的列,一切都非常顺利!谢谢你的帮助。

2 个答案:

答案 0 :(得分:1)

好吧,鉴于它是查询,(你应该通过在服务器上的提示运行它来证明)

将查询从sp中删除并用Explain作为前缀,以查看查询执行计划,但有些事情会直接脱离。

SELECT *
FROM itemproperty
inner join collectionitem on collectionitem.itemid = itemproperty.itemid and removed ='0000-00-00 00:00:00'

摆脱子查询。

删除了日期时间,是否已编入索引?

答案 1 :(得分:1)

您可以尝试这样做,但如果您的表缺少索引,则可能没什么用。

BEGIN
SELECT *
FROM itemproperty i
WHERE exists
    (SELECT 1
    FROM collectionitem c
    WHERE collectionid = sId AND i.itemid = c.itemid AND removed ='0000-00-00 00:00:00');
END