Re: Поиск по списку объектов с настраиваемым набором свойств
От: Андрей Никифоров  
Дата: 07.03.06 19:19
Оценка:
Здравствуйте, StephenVLG, Вы писали:

Вариант с избавлением от многих join'ов:

CREATE TABLE [dbo].[FieldData](
    [ItemId] [int] NOT NULL,
    [FieldID] [int] NOT NULL,
    [FieldValue] [varchar](100) NOT NULL,
 CONSTRAINT [PK_FieldData] PRIMARY KEY CLUSTERED 
(
    [ItemId] ASC,
    [FieldID] ASC
)
)

CREATE TABLE [dbo].[FieldQuery](
    [QueryID] [int] NOT NULL,
    [FieldID] [int] NOT NULL,
    [FieldValue] [varchar](100) NOT NULL,
 CONSTRAINT [PK_FieldQuery] PRIMARY KEY CLUSTERED 
(
    [QueryID] ASC,
    [FieldID] ASC
)
)


Запрос (критерии добавляются в табличку FieldQuery):

select 
        top 500
    d.ItemId
from
    FieldData d
    join FieldQuery q on q.fieldid = d.fieldid and d.fieldvalue = q.fieldvalue
Where
        q.QueryId = 1
group by 
        d.ItemId
having 
        count(*) = (select count(*) from FieldQuery where QueryId = 1)



1. Как это будет работать на больших объемах -- не знаю, надо проверять и играть с индексами (в т.ч. clustered/non clustered).

2. Работает как условие И

3. Проверяет четкое сравнение

На больших объемах данных и большом количестве полей для поиска, join может оказаться лучше, чем вариант c OR предложенный MatFiz здесь
Автор: MatFiz
Дата: 14.01.06
. Надо проверять...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.