首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >VB.NET MySqlDataAdapter.Fill几乎需要6-7秒。

VB.NET MySqlDataAdapter.Fill几乎需要6-7秒。
EN

Stack Overflow用户
提问于 2012-05-13 15:58:13
回答 2查看 356关注 0票数 0

我在表的一个大约1500行的存储过程中运行了一个简单的选择(注意到下面)。

代码语言:javascript
复制
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数据库的服务器在规范上都没有受到挑战。我猜是查询本身。

集合项保存将项目属性链接到集合的2个外键。我们向sproc sId(PK of集合)提供信息,以便子查询从特定的集合中返回所有的itemid,然后在itemid属性中使用itemid(PK)。

有没有办法加快这一进程?

更新

我的问题完全是因为索引不正确。一旦我学会了要索引的列,一切都是非常平滑的!谢谢你的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-13 16:25:07

您可以尝试这样做,但是如果您的表缺少索引,它可能不会有多大帮助。

代码语言:javascript
复制
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 
票数 1
EN

Stack Overflow用户

发布于 2012-05-13 16:14:48

考虑到这是查询,(您应该通过在服务器上运行它来证明这一点)

将查询从sp中删除,并在其前缀中添加Explain,以查看查询执行计划是否符合confrm,但有些内容直接突出。

代码语言:javascript
复制
SELECT *
FROM itemproperty
inner join collectionitem on collectionitem.itemid = itemproperty.itemid and removed ='0000-00-00 00:00:00'

以消除子查询。

是否删除日期时间,是否将其编入索引?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10573126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档