0

私はテーブルを持っています

Book: 
Id | Name |  ...

UrlRecord:  
Id | EntityId | Entityname | Slug  >> to store id-less url for many other tables like Category | Book | BookChapter...  

そのため、データは膨大です。

EntityId=> には、bookid、categoryid、chapterId などの他のテーブルの ID が含まれています...

Id EntityId    Entityname        Slug
1     2        Category      truyen-tranh
2     2        BookChapter    chapter-one

....

SearchBookDetails ストアド プロシージャ:

SELECT p.Source,
    (SELECT Slug from UrlRecord url where EntityName = 'Category' and EntityId = (SELECT top(1) CategoryId from Book_Category_Mapping bc where bc.BookId = p.Id)
    ) as CategorySeName

FROM   ....

クエリが重いため、上記の CategorySeName 句がある場合、パフォーマンスは非常に遅く、最大 22 秒です。

ただし、パフォーマンスを改善する方法がわかりませんが、上記のように CategorySeName 値が返されます。

4

2 に答える 2

1

あなたの問題は、相関サブクエリです。これは、選択ステートメントを基本的にカーソルに変更し、行ごとに実行する非常に貧弱な手法です。大規模なデータ セットがある場合は、絶対に使用しないでください。代わりに、派生テーブル、CTE、または一時テーブルを使用してください。

于 2013-07-10T13:48:52.793 に答える