sql >> Database >  >> RDS >> Mysql

Gebruikt MySQL bestaande indexen bij het maken van nieuwe indexen?

Nee, dat zal niet.

Theoretisch een index op (site, product, value, id) heeft alles wat nodig is om een ​​index te bouwen op een subset van deze velden (inclusief de indices op (product, value, id) en (value, id) ).

Het bouwen van een index van een secundaire index wordt echter niet ondersteund.

Ten eerste, MySQL ondersteunt geen snelle volledige indexscan (dat wil zeggen het scannen van een index in fysieke volgorde in plaats van logisch), waardoor een indextoegangspad duurder wordt dan het lezen van de tabel. Dit is geen probleem voor InnoDB , aangezien de tabel zelf altijd geclusterd is.

Ten tweede zijn de recordvolgorde in deze indexen totaal verschillend, dus de records moeten toch worden gesorteerd.

Het grootste probleem met de snelheid waarmee de index wordt gemaakt in MySQL is dat het de bestelling ter plaatse genereert (gewoon de records één voor één invoegen in een B-Tree ) in plaats van een voorgesorteerde bron te gebruiken. Zoals @Daniel al zei, lost snelle indexcreatie dit probleem op. Het is beschikbaar als plug-in voor 5.1 en is voorgeïnstalleerd in 5.5 .



  1. IP-adres van gedownloade bestanden invoegen in mysql

  2. Regex gebruiken met LIKE om eerst alfabetten te sorteren en daarna symbolen SQL

  3. Vervolg:Fout:Fout:Tabel1 is niet gekoppeld aan Tabel2

  4. RMySQL, fetch errors - RS-DBI driver waarschuwing:(fout bij het ophalen van rijen)