sql >> Databasteknik >  >> RDS >> Mysql

Använder MySQL befintliga index för att skapa nya index?

Nej, det gör det inte.

Teoretiskt sett ett index på (site, product, value, id) har allt som krävs för att bygga ett index på någon delmängd av dessa fält (inklusive indexen på (product, value, id) och (value, id) ).

Men att bygga ett index från ett sekundärt index stöds inte.

Först, MySQL stöder inte snabb full index scan (det vill säga att skanna ett index i fysisk ordning snarare än logiskt), vilket gör en indexåtkomstväg dyrare än tabellen som läses. Detta är inget problem för InnoDB , eftersom själva tabellen alltid är klustrad.

För det andra är postordningarna i dessa index helt olika så posterna måste sorteras ändå.

Men det största problemet med indexskapningshastigheten i MySQL är att den genererar beställningen på plats (bara att infoga posterna en efter en i ett B-Tree ) istället för att använda en försorterad källa. Som @Daniel nämnde, löser snabbt indexskapande detta problem. Det är tillgängligt som ett plugin för 5.1 och kommer förinstallerat i 5.5 .



  1. Hur man infogar data i den kapslade uppsättningsmodellen (MySQL);

  2. Hur man tar bort en datafil från en SQL Server-databas (T-SQL)

  3. INT-jämförelse utan WHERE-sats

  4. Konfigurera heterogen databasreplikering – SQL Server till Oracle