2012-10-03 37 views
0

我有一個關於優化複雜搜索查詢性能的想法。情況是這樣的:索引視圖可優化多個表格的搜索

基表,與字段上的搜索:

Server (uniqueNumber, serverName, hostName) 

表的加盟,與字段上的搜索:

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

我當時的想法是創建一個像這樣的索引視圖:

viewServers (ServerID, Term) 

(ServerID上的聚簇索引,非聚簇術語)

這是所有可能的數據的聯合:

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 

好或壞主意?

+0

你應該看看全文索引而不是索引視圖。 –

回答

0

這很難說,如果它是不知道了很多其他的事情你的數據庫是好還是壞主意。索引視圖可能會幫助特定查詢,但可能會傷害其他數據庫操作。另外,創建一個非唯一的聚集索引(ServerID)並不是一個好主意。