Krzysztof
Raczkowski
Stała współpraca,
Logifact-Systems Sp.
z o.o.
Temat: MS SQL (lub PostgreSQL) i wyszukiwanie po polu...
Witam Szanowne Audytorium :)Wyobraźmy sobie tabelę z kilkudziesięcioma milionami rekordów (tak naprawdę ilość nie jest istotna... zakładamy, że jest po co optymalizować :) ) zawierającą pole przeznaczone na flagi bitowe (2,4,8.... itd...).
Zakładanie indeksu na takim polu nie ma sensu bo zapytania będą typu:
select pk_id, pole1, pole2 from tabela_dane where flaga & 12 = 12
Jeżeli dołożymy tabelę asocjacyjną po to aby połączyć pk_id z rozpisanymi flagami na rekordzie - zysku nie będzie... bo lookup do danych aby dociągnąć pole1, pole2... też kosztuje...
Jeżeli mam tego typu dane... jak właściwie powinien być skonstruowany schemat aby wyszukiwanie danych po flagach było efektywne ?
Jedyną 'optymalizację' jaką udało mi się osiągnąć można uzyskać w taki sposób
1) Zakładamy indeks na flaga
2) Zapytanie robimy tak: (..) where (flaga >= 12) and (flaga & 12 = 12)
Logicznie jest to samo... a jest szansa że część danych wytnie się...
--
Pozdrawiam
K.