sql >> Database teknologi >  >> RDS >> Mysql

indeksere et bitfelt i MYSQL

Generelt set nej. Et bi-state felt fremskynder ikke forespørgsler, når de indekseres, fordi du i gennemsnit skal se på halvdelen af ​​rækkerne. Du ønsker, at dine indeksposter skal være selektive - en given post i indekset bør kun repræsentere en lille procentdel af de mulige værdier (f.eks. mindre end 10 %, helst i brøkdele af en procent). Ved at bruge indekset ignoreres de fleste data i tabellen, hvilket er det, der giver dig en præstationsfordel.

Nogle DBMS understøtter bitmap-indekser. De kan hjælpe, men du støder stadig ind i problemet med selektivitet.

Det opdaterede spørgsmål siger, at antallet af værdier med værdi 1 vil være lille (mindre end én procent); vil et indeks give dig en fordel nu?

Svaret er:

  • For de forespørgsler, hvor du angiver, at værdien er 1, så ja, et indeks på kolonnen kunne give en fordel, forudsat at optimeringsværktøjet rent faktisk gør brug af indekset. Du skal muligvis justere DBMS'et for at få det til at indse, at indekset er skævt til fordel for at bruge det med forespørgsler, hvor værdien er 1; dette plejer at være DBMS-specifikt, men opdatering af statistik i forskellige afskygninger er navnet på spillet, muligvis også ved hjælp af hints i SQL-forespørgslerne. Selvfølgelig, hvis optimeringsværktøjet aldrig bruger indekset, giver det stadig ingen fordel - og optimeringsværktøjet kan beslutte, at andre indekser hjælper det mere på en eller anden måde.

  • For de forespørgsler, hvor værdien er 0, bør indekset ikke bruges. Chancerne er dog, at DBMS også vil fortsætte med at opretholde indekset for 0-værdierne - selvom det aldrig burde bruge dem. Det ville være et usædvanligt DBMS, der kunne beordres 'kun indekser denne kolonne for andre værdier end nul', selvom det ville være meget fordelagtigt.

Så - det kommer an på. Det afhænger af forespørgslerne, og det afhænger af optimeringsværktøjet.

Bemærk også, at et sammensat indeks - på nogle andre sædvanligt brugte kolonner og så bit-feltet godt kan give en vis fordel. Så hvis du næsten altid vælger et datointerval, bør et sammensat indeks på dato- og bitfeltskolonnerne (sandsynligvis i den rækkefølge) give dig et godt indeks.



  1. SQL DML:Forkert datoværdi (MySQL)

  2. Understøtter Postgres indlejrede eller autonome transaktioner?

  3. Sortering af array-elementer

  4. mysql2 perle kompileret til forkert mysql-klientbibliotek