sql >> Database >  >> RDS >> Mysql

Optimalisatie van MySQL-verwijderinstructie

Als uw DELETE is bedoeld om een ​​grote meerderheid van de rijen in die tabel te verwijderen, een ding dat mensen vaak doen, is alleen de rijen die u wilt behouden naar een dubbele tabel kopiëren en vervolgens DROP TABLE gebruiken of TRUNCATE om de originele tafel veel sneller te wissen.

Een index kan helpen bij het vinden van de rijen die u moet verwijderen, maar voor het verwijderen moet de index worden bijgewerkt. Na het verwijderen van een groot aantal rijen, kan de index onevenwichtig zijn en wat onderhoud vereisen met OPTIMIZE TABLE .

De DATE_SUB() functie is een constante uitdrukking (deze varieert niet rij per rij), dus de query-optimizer moet slim genoeg zijn om deze uit te rekenen en de berekening één keer uit te voeren.

U hoeft geen extra index voor een primaire sleutel te maken. De primaire sleutelbeperking creëert impliciet een index die hetzelfde voordeel biedt als een niet-primaire sleutelindex.

Een samengestelde index is waarschijnlijk net zo nuttig als een index met één kolom, op voorwaarde dat uw zoekcriteria verwijzen naar de meest linkse kolom(men) van de index. Het "waarschijnlijk" voorbehoud is te wijten aan het feit dat de individuele indexknooppunten groter zijn en er dus meer geheugen nodig is om de index in de cache te plaatsen, maar dit is een factor die zo klein is dat ik geen hele andere index met één kolom zou maken.



  1. MYSQL haalt json-elementen uit waar de json het bevat

  2. Oracle:'=ELK()' vs. 'IN ()'

  3. Items schrijven naar een MySQL-database in Scrapy

  4. Hoe kom je achter de totale omvang van de gegevens in de MySQL-database?