Я хочу запросить более 14 000 000 документов, хранящихся в виде поля XML в SQL Server.
Я сгенерировал 1 000 000 строк в базе данных для тестирования, но простой выбор без условия "где" занимает около 3 минут. Я также применил XML-индексирование, но его производительность по-прежнему неприемлема. Аналогичный сценарий занимает 19 секунд для аналогичной таблицы, в которой все поля указаны как типизированные.
Вот моя типизированная таблица:
CREATE TABLE [dbo].[Fields] (
[Id] BIGINT IDENTITY (1, 1) NOT NULL,
[Title] NCHAR (10) NOT NULL,
[Duration] INT NOT NULL,
[Cost] MONEY NOT NULL,
[Consignee] BIGINT NOT NULL,
[Date] DATETIME NOT NULL,
[TariffId] BIGINT NOT NULL,
[InvoiceType] NCHAR (10) NOT NULL,
[IsPayed] BIT NOT NULL
);
и это один образец XML:
<Invoice>
<Id>1</Id>
<Title>title</Title>
<Duration>726643700</Duration>
<Cost>312118909727165.6133</Cost>
<Consignee>3120910928797722624</Consignee>
<Date>4543-07-16T01:40:29.623</Date>
<TariffId>3120910928797722624</TariffId>
<InvoiceType>InvoiceType</InvoiceType>
<IsPayed>1</IsPayed>
</Invoice>
Это индексы, которые я применил:
CREATE XML INDEX idx_xCol_Path on [dbo].[XML] (InvoiceItem)
USING XML INDEX idx_xCol FOR PATH
CREATE XML INDEX idx_xCol_Value on [dbo].[XML] (InvoiceItem)
USING XML INDEX idx_xCol FOR VALUE
SELECT *
занимает 3 минуты? Мне это не кажется таким уж плохим. Я не могу представить, что ваши типичные запросы времени выполнения будутSELECT *
без предложенияWHERE
. Индексация XML также не поможет такому запросу - она поможет только в том случае, если вы ищете XML-документы, содержащие определенные атрибуты/значения. Можете ли вы показать структуры таблиц, которые вы сравниваете (таблица со столбцами XML и аналогичная таблица, в которой все поля имеют типизированный вид)? - person Aaron Bertrand   schedule 07.02.2012