Mysql
 sql >> база данни >  >> RDS >> Mysql

индексира битово поле в MYSQL

Най-общо казано, не. Полето с две състояния не ускорява заявките, когато е индексирано, защото трябва да гледате средно половината от редовете. Искате вашите записи в индекса да бъдат селективни - даден запис в индекса трябва да представлява само малък процент от възможните стойности (да речем, по-малко от 10%, за предпочитане в части от процента). След това използването на индекса игнорира повечето данни в таблицата, което ви дава предимство в производителността.

Някои СУБД поддържат растерни индекси. Те могат да помогнат, но все пак се сблъсквате с проблема със селективността.

Актуализираният въпрос казва, че броят на стойностите със стойност 1 ще бъде малък (по-малко от един процент); Индексът ще ви донесе ли полза сега?

Отговорът е:

  • За тези заявки, при които посочвате, че стойността е 1, тогава да, индексът в колоната може да осигури полза, при условие че оптимизаторът действително използва индекса. Може да се наложи да настроите СУБД, за да я накарате да разбере, че индексът е изкривен в полза на използването му със заявки, където стойността е 1; това обикновено е специфично за СУБД, но актуализирането на статистически данни под различни форми е името на играта, вероятно с помощта на подсказки и в SQL заявките. Разбира се, ако оптимизаторът никога не използва индекса, той пак не носи никаква полза - и оптимизаторът може да реши, че други индекси му помагат повече по някакъв начин.

  • За тези заявки, при които стойността е 0, индексът не трябва да се използва. Шансовете са обаче, че СУБД ще продължи да поддържа индекса и за стойностите 0 - въпреки че никога не трябва да ги използва. Това би било необичайна СУБД, на която може да се зададе „индексиране на тази колона само за стойности, различни от нула“, въпреки че това би било много полезно.

Така че - зависи. Зависи от заявките и зависи от оптимизатора.

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Не може да се свърже с отдалечен MySQL сървър

  2. Как да мигрираме от Oracle към MySQL / Percona Server

  3. Mysql Max с групиране по заявка

  4. MySQL LOAD DATA INFILE номер на магазина

  5. Времето за промяна на експортирането на MySQL данни