sql >> データベース >  >> RDS >> Sqlserver

ORDER BY 句による SQL クエリのパフォーマンスの低下

    ORDER BY 結果セットを並べ替える必要がありますが、大きい場合は時間がかかる場合があります。

    最適化するには、テーブルを適切にインデックス化する必要がある場合があります。

    ただし、インデックス アクセス パスには欠点があるため、さらに時間がかかる場合があります。

    クエリに等結合以外のものがある場合、または範囲述語 (< など) 、 > または BETWEEN 、または GROUP BY 節)、次に ORDER BY に使用されるインデックス 他のインデックスが使用されなくなる可能性があります。

    クエリを投稿していただければ、最適化の方法をお伝えできると思います。

    更新:

    クエリを書き直してください:

    SELECT  *
    FROM    View_Product_Joined j 
    LEFT JOIN
            [dbo].[OPR_InventoryRules] irp
    ON      irp.ID = j.skuid
            AND irp.InventoryRulesType = 'Product'
    LEFT JOIN
            [dbo].[OPR_InventoryRules] irs
    ON      irs.ID = j.NodeSiteID
            AND irs.InventoryRulesType = 'Store'
    CROSS APPLY
            (
            SELECT  TOP 1 *
            FROM    OPR_PriceLookup pl
            WHERE   pl.siteID = j.NodeSiteID
                    AND pl.skuid = j.skuid
                    AND pl.RoleID IN (-1, 13)
            ORDER BY
                    pl.RoleID desc
            ) pl
    WHERE   SiteName = N'EcommerceSite'
            AND Published = 1
            AND DocumentCulture = N'en-GB'
            AND NodeAliasPath LIKE N'/Products/Cats/Computers/Computer-servers/%'
            AND NodeSKUID IS NOT NULL
            AND SKUEnabled = 1
    ORDER BY
            NodeOrder ASC
    

    リレーション View_Product_Joined 、名前が示すように、おそらくビューです。

    その定義を投稿していただけますか?

    インデックス可能な場合は、View_Product_Joined (SiteName, Published, DocumentCulture, SKUEnabled, NodeOrder) にインデックスを作成すると効果的です。 .




    1. DockerMySQL-SpringBootアプリからMySQLデータベースに接続できません

    2. postgreSQLで既存のテーブルのcreatetablesqlステートメントを生成する方法

    3. ILIKE一致ワード境界PostgreSQL9

    4. OracleのROWIDは内部でどのように生成されますか?