Порядок ViewField в SPQuery, влияющий на производительность
Я столкнулся со странной проблемой при написании SPQuery и указании ViewFields. У меня есть восемь полей, которые мне нужны. Пять из них проиндексированы.
Моя проблема в том, что в зависимости от порядка, в котором я указываю эти поля просмотра, производительность моего запроса резко изменяется.
Вот два сценария:
1:
<FieldRef Name="OrderNumber" />
<FieldRef Name="Title" />
<FieldRef Name="OrderCreateDate" />
<FieldRef Name="OrderEstimatedDeliveryDate" />
<FieldRef Name="OrderStatus" />
<FieldRef Name="OrderOO" />
<FieldRef Name="OrderSiteID" />
<FieldRef Name="ID" />
2:
<FieldRef Name="OrderNumber" />
<FieldRef Name="Title" />
<FieldRef Name="OrderCreateDate" />
<FieldRef Name="OrderEstimatedDeliveryDate" />
<FieldRef Name="OrderSiteID" />
<FieldRef Name="OrderStatus" />
<FieldRef Name="OrderOO" />
<FieldRef Name="ID" />
Индексируемые поля:
OrderNumber
Title
OrderCreateDate
OrderSiteID
OrderStatus
При выполнении запроса с ViewFields в первом порядке это занимает 4,7 секунды. Выполнение запроса во втором порядке занимает 62 секунды. Ничего другого с запросом не изменилось, когда я тестировал.
Запрос возвращает большой объем данных, поэтому я не ожидаю, что он будет быстрым, но может ли кто-нибудь помочь понять, почему изменение порядка полей обзора имеет такое большое влияние?
Благодарю.
1 ответ
Я полагаю, что это связано с природой базы данных SharePoint (то есть таблицы AllItems), которая на самом деле выполняет несколько объединений, чтобы "построить" столбцы списка.
Поэтому я думаю, что это должно зависеть от распределения данных в вашем списке (объединение таблиц {маленький х маленький х большой} или {большой х маленький х маленький})
Например, в LIST с последующим распространением данных для sharepoint потребуется больше времени на вывод данных в порядке BAC, чем в ABC
СПИСОК
A B C
---------------
| | K1 | |
| N1 |----| |
| | K2 | |
|----|----| |
| | | |
| | K1 | Z1 |
| N2 | | |
| |----| |
| | K2 | |
| |----| |
| | K3 | |
|----|----| |