Подходит ли тип данных XML для больших таблиц?

Я хочу запросить более 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

person Reza Owliaei    schedule 07.02.2012    source источник
comment
SELECT * занимает 3 минуты? Мне это не кажется таким уж плохим. Я не могу представить, что ваши типичные запросы времени выполнения будут SELECT * без предложения WHERE. Индексация XML также не поможет такому запросу - она ​​поможет только в том случае, если вы ищете XML-документы, содержащие определенные атрибуты/значения. Можете ли вы показать структуры таблиц, которые вы сравниваете (таблица со столбцами XML и аналогичная таблица, в которой все поля имеют типизированный вид)?   -  person Aaron Bertrand    schedule 07.02.2012
comment
Не могли бы вы опубликовать свою схему, DDL для таблиц и индексов и запрос, который вы выполняете?   -  person Quassnoi    schedule 07.02.2012
comment
@Quassnoi и Аарон Бертран: извините за задержку.   -  person Reza Owliaei    schedule 07.02.2012
comment
Хорошо, я думал, вы храните XML-документы и другие данные. Вы просто сохраняете данные в формате XML. Почему? Тип XML на самом деле не для этого. Конечно, это упрощает работу приложений, которым в противном случае потребовалась бы сериализация-десериализация и т. д., но это не способ создания прилично работающего приложения базы данных. Ваша первая таблица кажется мне гораздо более оптимальной, чем универсальная таблица с одним столбцом XML.   -  person Aaron Bertrand    schedule 07.02.2012
comment
@ Аарон Бертран: Подождите секунду! сначала прочитайте источник моей проблемы: stackoverflow.com/questions/9148000/   -  person Reza Owliaei    schedule 07.02.2012
comment
@Reza: какой запрос ты выполняешь?   -  person Quassnoi    schedule 07.02.2012
comment
Я думаю, что в другом вопросе вам представлены другие решения, кроме «ОК», думаю, мне нужно использовать для этого XML.   -  person Aaron Bertrand    schedule 07.02.2012
comment
@AaronBertrand: Да, но другие решения не полностью соответствовали моим требованиям, и он тоже упомянул. Я выбрал первый вариант.   -  person Reza Owliaei    schedule 07.02.2012
comment
@Quassnoi: Сейчас я просто тестирую производительность этого типа данных. на самом деле, я должен настроить отчеты по этому столбцу позже, и я беспокоюсь о производительности своих отчетов.   -  person Reza Owliaei    schedule 07.02.2012


Ответы (2)


Мои различные тесты заставили мое решение измениться. XML отлично подходит для примерно 1-2 миллионов записей. В моем случае срок жизни приложения должен быть более 3 лет при скорости производства документов. Поэтому я попытался использовать таблицы вместо полей xml. Другим возможным решением может быть одна запись, но существует ограничение на размер документа xml. Когда я отслеживаю производительность по сравнению с рекордными цифрами, я обнаружил, что она ныряет после миллиона записей. Кроме того, при таком масштабе рост индексных файлов на SQL был неприемлем.

person Reza Owliaei    schedule 18.03.2012

Большое НЕТ. Избегайте XML для таблиц с большим количеством записей, так как определение записи имеет тенденцию повторяться снова и снова. XML подходит для документов, в которых количество разметки меньше по отношению к данным. Если вы хотите, чтобы таблица была удобочитаемой, используйте csv или аналогичный формат.

person user877329    schedule 14.07.2015