Индексированное представление для оптимизации поиска по нескольким таблицам

У меня вопрос по поводу моей идеи по оптимизации производительности сложного поискового запроса. Вот такая ситуация:

Базовая таблица с полями для поиска:

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

Хорошая или плохая идея?


person ibram    schedule 03.10.2012    source источник
comment
Для этого вам следует смотреть на полнотекстовую индексацию, а не на индексированные представления.   -  person Martin Smith    schedule 03.10.2012


Ответы (1)


Трудно сказать, хорошая это идея или плохая, не зная многих других вещей о вашей базе данных. И индексированное представление, вероятно, поможет в этом конкретном запросе, но может повредить другим операциям с базой данных. Кроме того, создание неуникального кластерного индекса (ServerID) - не лучшая идея.

person d89761    schedule 03.10.2012