Изграждане на автопредложения

Създавам автопредложение. Засега целевото приложение е десктоп, но идеята е да се изгради възможно най-силно и след това може би да се включи в мрежа.

В момента съм в самото начало на проекта: мисля за базата данни (SQL Server 2008)

Автоматичното предложение ще бъде от таблица с ~40 000 000 реда.

В момента моите опции са: търсене в пълен текст или създаване на таблица, както ще опиша сега:

Моите артикули за автоматично предлагане:

a b c
1 2 3
x y z

Получената таблица:

a b c              a b c
a b c              a c b
a b c              b a c
a b c              b c a
a b c              c a b
a b c              c b a

И така за всеки артикул.

Сега моят въпрос:

Кое от тях е най-добро, когато искам да минимизирам търсенето на елементите за списъка с автоматични предложения? Има ли друг по-добър?

Благодаря!

Диего


person Diego    schedule 11.11.2010    source източник


Отговори (2)


Според мен FULLTEXT би било по-добре, дори ако имате нужда само от точни съвпадения.

Въпреки това, дори ако решите да не използвате FULLTEXT защо трябва да индексирате всички пермутации? Можете да ги индексирате веднъж по азбучен ред (a, b, c) и просто да пренаредите елементите в същия ред, преди да ги предоставите като параметър на заявката.

Тоест винаги трябва да търсите C, D, O, дори ако заявката ви казва O, C, D

person Quassnoi    schedule 11.11.2010
comment
Индексирам всички пермутации, защото няма да търся точното съвпадение и искам да намаля възможното време за заявка при всяко търсене. Така че, когато потребителите започнат да въвеждат всяка дума, мога да направя LIKE 'word%' и това е всичко. - person Diego; 11.11.2010
comment
@Diego: в този случай определено трябва да използвате индекс FULLTEXT - person Quassnoi; 11.11.2010
comment
@Diego: и дори ако решите да използвате B-Tree индекси, не е необходимо да индексирате всички пермутации. Във вашия случай, индекс 'a, b, c', 'b, a' и 'c, b', това са само 3 записа, а не 6. Вижте тази статия: explainextended.com/2009/05/09/creating-indexes - person Quassnoi; 11.11.2010

И така... искате да направите заявка към таблица с 40 милиона записа въз основа на частичен вход, съответстващ на която и да е част от колоната (или дори множество колони), вероятно от много потребители едновременно... и предполагам, че очаквате под- второ време за реакция.

По-добре вашият DB сървър да бъде истински звяр.

Горещо бих ви посъветвал да преосмислите плана си или поне да ограничите избора, който потребителите имат, като ограничаване на търсенето само до началото на колоната и т.н.
Но ако решите да продължите с това, пълен текст не може да става, освен ако не включите някакъв забавен курсор за изчакване в приложението си, за да забавлявате потребителите, докато се изпълнява заявката за автоматично внушение.

person Pavel Urbančík    schedule 11.11.2010
comment
Да, очаквам време за отговор под секунди. Но всички пермутации, които запазвам, са точно за избягване на това, което казвате: съвпадение на която и да е част от колоната (или дори няколко колони). Не, само една колона и само в началото (заради пермутациите). - person Diego; 12.11.2010