我有一个关于优化复杂搜索查询性能的想法的问题。这是这种情况:
基表,包含要搜索的字段:
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
好主意还是坏主意?