sql >> Database >  >> RDS >> Mysql

Heeft soft_delete van Laravel een index nodig op MySQL?

De kolom deleted_at is geen goede indexkandidaat. Ik zal proberen het beter uit te leggen in vergelijking met de opmerking:indexen zijn alleen nuttig als hun kardinaliteit relatief hoog is. Kardinaliteit is een getal dat de uniekheid van de index in de dataset beschrijft. Dat betekent dat het het totale aantal records is gedeeld door het totale aantal unieke records.

De kardinaliteit van de primaire sleutel is bijvoorbeeld 1. Elke record bevat een unieke waarde voor de primaire sleutel. 1 is ook het hoogste getal. Je kunt het beschouwen als een "100%".

Maar een kolom zoals delete_at heeft zo'n waarde niet. Wat Laravel doet met delete_at is controleren of het al dan niet null is. Dat betekent dat het twee mogelijke waarden heeft. Kolommen die twee waarden bevatten, hebben een extreem lage kardinaliteit die afneemt naarmate het aantal records toeneemt.

Je kunt zo'n kolom indexeren, maar dat helpt niet. Wat er zal gebeuren, is dat het de zaken kan vertragen en ruimte kan innemen.

TL;DR:nee, u hoeft die kolom niet te indexeren, index heeft geen gunstige invloed op de prestaties.



  1. Hoe om te gaan met Ruby on Rails-fout:installeer de postgresql-adapter:`gem install activerecord-postgresql-adapter'

  2. SQL-databases maken en manipuleren met Python

  3. 7 manieren om uw Oracle-versie te controleren

  4. Gedeeltelijke unieke index maken met sqlalchemy op Postgres