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

MySQL използва ли съществуващи индекси за създаване на нови индекси?

Не, няма да стане.

Теоретично, индекс на (site, product, value, id) разполага с всичко необходимо за изграждане на индекс за всяко подмножество от тези полета (включително индексите на (product, value, id) и (value, id) ).

Изграждането на индекс от вторичен индекс обаче не се поддържа.

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

Второ, редовете на записите в тези индекси са напълно различни, така че записите все пак трябва да бъдат сортирани.

Основният проблем обаче е със скоростта на създаване на индекс в MySQL е, че генерира поръчката на място (просто вмъкване на записите един по един в B-Tree ) вместо да използвате предварително сортиран източник. Както @Daniel спомена, бързото създаване на индекс решава този проблем. Предлага се като плъгин за 5.1 и се предлага предварително инсталиран в 5.5 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предотвратяване на SQL инжектиране в динамичен SQL

  2. Entity Framework - Linq заявка с поръчка по и групиране по

  3. Не мога да се свържа с локален MySql сървър чрез сокет '/run/mysqld/mysqld.sock' (2)

  4. iOS - Правилно форматиране на времеви печати между mySQL (apache) и iOS (NSDate)

  5. Pymysql Insert Into не работи