sql >> Databasteknik >  >> RDS >> Mysql

Behöver Laravels soft_delete index på MySQL?

Kolumnen deleted_at är ingen bra indexkandidat. Jag ska försöka förklara bättre jämfört med kommentaren:index är endast användbara när deras kardinalitet är relativt hög. Kardinalitet är ett nummer som beskriver indexets unikhet i datamängden. Det betyder att det är det totala antalet poster dividerat med det totala antalet unika poster.

Till exempel är primärnyckelns kardinalitet 1. Varje post innehåller ett unikt värde för primärnyckeln. 1 är också det högsta antalet. Du kan betrakta det som en "100%".

Men en kolumn som deleted_at har inte ett sådant värde. Vad Laravel gör med deleted_at är att kontrollera om den är null eller inte. Det betyder att den har två möjliga värden. Kolumner som innehåller två värden har extremt låg kardinalitet som minskar när antalet poster ökar.

Du kan indexera en sådan kolumn, men det kommer inte att vara till någon hjälp. Vad som kommer att hända är att det kan sakta ner saker och ting och ta upp plats.

TL;DR:nej, du behöver inte indexera den kolumnen, index kommer inte att ha någon fördelaktig inverkan på prestanda.



  1. Hämta data från MySQL-databasen till html-rullgardinslistan

  2. Varför skulle rader matcha men inte ändras med en mysql-uppdateringssats?

  3. postgresql returnerar 0 om det returnerade värdet är null

  4. Hur man förstår en FÖRKLARA ANALYS