0

複雑な検索クエリのパフォーマンスを最適化するという考えについて質問があります。これは状況です:

検索するフィールドを含むベース テーブル:

Server (uniqueNumber, serverName, hostName)

結合するテーブルと検索するフィールド:

Customer (Company, vatNumber)
CustomerContact (firstName, lastName, email, telephone, mobile)
Ip (ipAddress)

私が持っていたアイデアは、次のようなインデックス付きビューを作成することでした:

viewServers (ServerID, Term)

(ServerID のクラスター化インデックス、Term の非クラスター化)

これは可能なすべてのデータの和集合です:

SELECT * FROM (
    SELECT s.ServerID AS ServerID, c.Company AS Term FROM Customer c 
        INNER JOIN Server s ON s.CustomerID = c.CustomerID
    UNION
    SELECT s.ServerID AS ServerID, c.vatNumber AS Term FROM Customer c 
        INNER JOIN Server s ON s.CustomerID = c.CustomerID
    UNION
    SELECT s.ServerID AS ServerID, c.firstName AS Term FROM CustomerContact cc 
        INNER JOIN Customer s ON s.CustomerID = cc.CustomerID
        INNER JOIN Server s ON s.CustomerID = c.CustomerID
    UNION
    SELECT s.ServerID AS ServerID, i.ipAddress AS Term FROM Ip i 
        INNER JOIN Server s ON i.ServerID = i.ServerID
    UNION
) AS result ORDER BY Term

検索したいときは、これを計画していました:

SELECT * FROM Server WHERE ServerID IN (SELECT ServerID FROM viewServers WHERE Term LIKE @Term

いいアイデアか悪いアイデアか?

4

1 に答える 1

0

データベースについて他の多くのことを知らずに、それが良いアイデアか悪いアイデアかを判断するのは困難です。また、インデックス付きビューはおそらくその特定のクエリには役立ちますが、他のデータベース操作に悪影響を与える可能性があります。また、一意でないクラスター化インデックス (ServerID) を作成することはお勧めできません。

于 2012-10-03T16:25:15.373 に答える