簡體   English   中英

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

[英]VB.NET MySqlDataAdapter.Fill takes almost 6-7 seconds

我在一個大約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)。

有沒有辦法加快這個過程?

UPDATE

我的問題完全是由於索引不當造成的。 一旦我了解了要索引的列,一切都非常順利! 謝謝您的幫助。

好吧,鑒於它是查詢,(你應該通過在服務器上的提示運行它來證明)

將查詢從sp中刪除並用Explain作為前綴,以查看查詢執行計划以確定,但有些事情直接脫穎而出。

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

擺脫子查詢。

刪除了日期時間,是否已編入索引?

您可以嘗試這一點,但如果您的表缺少索引,它可能沒有多大幫助。

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 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM