[英]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.