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

По-добри ли са уникалните индекси за ефективност при търсене в колони? (PGSQL и MySQL)

Ако вашите данни са уникални, трябва да създадете UNIQUE индекс върху тях.

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

В SQL сървър и в PostgreSQL , например, ако сортирате по УНИКАЛЕН ключ, оптимизаторът игнорира ORDER BY клаузи, използвани след това (тъй като са ирелевантни), т.е. д. тази заявка:

SELECT  *
FROM    mytable
ORDER BY
        col_unique, other_col
LIMIT 10

ще използва индекс на col_unique и няма да сортира по other_col защото е безполезно.

Тази заявка:

SELECT  *
FROM    mytable
WHERE   mycol IN
        (
        SELECT  othercol
        FROM    othertable
        )

също ще се преобразува в INNER JOIN (за разлика от SEMI JOIN ), ако има УНИКАЛЕН индекс на othertable.othercol .

Индексът винаги съдържа някакъв вид указател към реда (ctid в PostgreSQL , указател на ред в MyISAM , първичен ключ/унификатор в InnoDB ) и листата са подредени по тези указатели, така че всъщност всеки индексен лист е уникален по някакъв начин (макар че може да не е очевиден).

Вижте тази статия в моя блог за подробности за ефективността:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException:Дублиран запис '' за ключ 'PRIMARY'

  2. Резултат от търсене и класиране по ключови думи

  3. Рекурсивни категории с една заявка?

  4. ElasticSearch river JDBC MySQL не изтрива записи

  5. Защо Java не може да се свърже с MySQL 5.7 след последната актуализация на JDK и как трябва да се коригира? (ssl.SSLHandshakeException:Няма подходящ протокол)