複雑な検索クエリのパフォーマンスを最適化するという考えについて質問があります。これは状況です:
検索するフィールドを含むベース テーブル:
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
いいアイデアか悪いアイデアか?