2015-01-19 5 views
0

Я не понимаю, почему я не могу использовать первичный ключ в качестве индекса в моем представлении.Почему мой запрос намекает на игнорирование?

Вот основная таблица

CREATE TABLE [dbo].[xFedDBLogMsg](
    [ID] [int] IDENTITY(1,1) NOT NULL, 
    [msgType] [int] NOT NULL, 
    [date] [datetime] NOT NULL, 
    [delay] [time](7) NOT NULL, 
    [error] [bit] NOT NULL, 
    [processID] [int] NULL, 
CONSTRAINT [PK_tFedDBLogMsg] PRIMARY KEY CLUSTERED 
(
    [ID] ASC 
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
) ON [PRIMARY] 

Вот мнение о

CREATE VIEW [dbo].[tFedDBLogMsg] 
AS 
SELECT 
    L.ID 
    , L.msgType 
    , L.[date] 
    , M.MsgSent 
    , M.MsgReceived 
    , L.[delay] 
    , L.error 
    , L.processID 
    , NEWID() AS INTERNALID 
FROM dbo.xFedDBLogMsg AS L 
LEFT JOIN FedDBMsg.dbo.tFedDBLogMsg AS M ON (
    M.ID = L.ID 
) 

А вот процедура, которая дает мне предупреждение:

ALTER PROCEDURE spGetFedDBErrorsByID (
    @pIDS AS dbo.typeNumberList READONLY 
) 
AS 
BEGIN 
     SELECT 
      MSG.ID 
      , MSG.msgType 
      , MSG.date 
      , MSG.MsgSent 
      , MSG.MsgReceived 
     FROM (
      SELECT 
       CAST(ID.n AS INT) AS ID 
      FROM @pIDS AS ID 
     ) AS X 
     INNER JOIN MyGolf.dbo.tFedDBLogMsg AS MSG WITH (INDEX(PK_tFedDBLogMsg)) ON (
      MSG.ID = X.ID 
     ) 

END 
GO 

Warning: Index hints supplied for view 'MyGolf.dbo.tFedDBLogMsg' will be ignored.

PS: Есть много вариантов проходов Lorem Ipsum, но большинство из них подверглось изменению в той или иной форме, путем введения юмора или рандомизированных слов, которые не выглядят даже немного правдоподобными. Если вы собираетесь использовать прохождение Lorem Ipsum, вам нужно быть уверенным, что в середине текста нет ничего смущающего. Все генераторы Lorem Ipsum в Интернете, как правило, повторяют предопределенные куски, делая это первым истинным генератором в Интернете. Он использует словарь более 200 латинских слов в сочетании с несколькими структурными предложениями предложений для создания Lorem Ipsum, который выглядит разумным. Поэтому генерируется Lorem Ipsum всегда свободен от повторения, вводят юмор, или не-характерные слова и т.д.

+0

к сожалению для StackOverflow «PS» заставил меня добавить детали, когда я не могу понять, что еще я могу сказать. –

+0

Итак, у вас есть таблица '** x ** FedDBLogMsg', которая имеет индекс под названием' PK _ ** t ** FedDBLogMsg'. У вас есть просмотр '** t ** FedDBLogMsg', который ссылается на' ** t ** FedDBLogMsg' в (другой?) Базе данных 'FedDBMsg'. И затем у вас есть хранимая процедура, которая ссылается на базу данных «MyGolf». Это довольно грязный и очень похожий идентификатор и сочетание баз данных. Я думаю, первое, что нужно было бы проверить, что здесь нет опечаток. –

+0

** t ** FedDBLogMsg - это вид, заменяющий старую таблицу. поэтому он назван как старая таблица –

ответ

3

В части

WITH (INDEX(PK_tFedDBLogMsg)) 

является PK_tFedDBLogMsg к тому же имя ограничения, кластерный индекс на представлении также?

Если да, обязательно используйте опцию NOEXPAND.

0

«Автоматическое использование индексированного представления по оптимизатору запросов» доступно только в издании Enterprise (и Developer). Это означает, что в корпоративной версии вы также можете оптимизировать запросы, создавая индексированные представления: сервер sql может использовать его, даже если вы не указали его в тексте запроса

«Прямой запрос индексированных представлений (с использованием подсказки NOEXPAND)» доступен в все выпуски

https://docs.microsoft.com/en-US/sql/sql-server/editions-and-components-of-sql-server-2016

 Смежные вопросы

  • Нет связанных вопросов^_^