sql >> Database >  >> RDS >> Mysql

Dure volledige tafelscan op alles selecteren zonder voorwaarde

Zie onderstaande link voor meer details

https://dev.mysql.com/doc /refman/8.0/en/table-scan-avoidance.html

oorzaak van volledige tabelscan staat hieronder

  • De tabel is zo klein dat het sneller is om een ​​tabelscan uit te voeren dan om een ​​sleutel op te zoeken. Dit is gebruikelijk voor tabellen met minder dan 10 rijen en een korte rijlengte.

  • Er zijn geen bruikbare beperkingen in de ON- of WHERE-clausule voor geïndexeerde kolommen.

  • U vergelijkt geïndexeerde kolommen met constante waarden en MySQL heeft berekend (op basis van de indexboom) dat de constanten een te groot deel van de tabel beslaan en dat een tabelscan sneller zou zijn

  • U gebruikt een sleutel met een lage kardinaliteit (veel rijen komen overeen met de sleutelwaarde) via een andere kolom. In dit geval gaat MySQL ervan uit dat door het gebruik van de sleutel waarschijnlijk veel sleutelzoekopdrachten zullen worden uitgevoerd en dat een tabelscan sneller zou zijn.

om het onderstaande gebruik van de volledige tabelscan te vermijden:

  • Gebruik ANALYSE TABLE tbl_name om de sleuteldistributies voor de gescande tabel bij te werken.

  • Gebruik FORCE INDEX voor de gescande tabel om MySQL te vertellen dat tabelscans erg duur zijn in vergelijking met het gebruik van de gegeven index:

    bijv. SELECTEER * VANUIT t1, t2 FORCE INDEX (index_for_column)WAAR t1.col_name=t2.col_name;




  1. Een Oracle-functie aanroepen vanuit Java

  2. Oracle UTL_SMTP:Voorbeeld van e-mail met bijlage verzenden met Oracle Wallet-verificatie

  3. Codeigniter tijdzone mysql instellingen

  4. Verbinding maken met MySQL in een externe server vanuit python