約 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 は、item プロパティをコレクションにリンクする 2 つの外部キーを保持します。サブクエリが特定のコレクションからすべての itemid を返すように sproc sId(コレクションの PK) をフィードし、itemproperty で itemid(PK) を使用します。
プロセスをスピードアップする方法はありますか?
アップデート
私の問題は完全に不適切なインデックス作成が原因でした。どの列にインデックスを付けるかがわかれば、すべてが非常にスムーズになります。ご協力ありがとうございました。