У нас есть три таблицы, в которых хранится информация о документе, которую я назову таблицей A, B и C. В таблице A хранятся основные поля для указанных документов (например, имя и размер файла и другая общая информация).Чтобы динамически добавлять новые поля, мы используем Таблицу B для хранения списка новых полей и их типов данных (определяемых перечислением), а Таблицу C - для хранения значений для этих полей.
Table A
ID - PK int
FieldX...
FieldY...
FieldZ...
Table B
Id - PK int
Name - nvarchar(max)
Type - int
Table C
Id - PK int
AId - FK to table A int
BId - FK to table B int
Value - nvarchar(max)
То, что мы хотим сделать максимально эффективно, - это извлечь значения из таблицы C в качестве дополнительного столбца в запросе из таблицы A. Прямо сейчас вот как я делаю это для каждого дополнительногополе в таблице B.
select (select c.value
from B b, C c
where c.AId = a.Id
and c.Bid = b.Id
and b.Name = 'Dynamic Field Name') As 'Dynamic Field Name'
From A a
У нас есть база данных с таблицей A, заполненной 36000 строк.Для каждого дополнительного динамического поля, добавляемого в запрос, его добавление составляет около 4 секунд к общему времени завершения запроса, в результате чего запрос, содержащий 10 динамических полей, занимает не менее 40 секунд.Реально, мы хотим, чтобы любой запрос заканчивался до 10. Есть ли способ написать это более эффективно?