Is het realistisch om zoveel rijen te hebben met dezelfde price
? Is het realistisch om 444K rijen van een query te retourneren? Ik vraag deze omdat query-optimalisatie is gebaseerd op "normale" gegevens.
Een index (bijv. INDEX(price)
) is handig bij het zoeken naar een price
dat komt een klein aantal keer voor. In feite schuwt de Optimizer de index als hij ziet dat de waarde waarnaar wordt gezocht meer dan ongeveer 20% van de tijd voorkomt. In plaats daarvan zou het gewoon de index negeren en doen wat je eerst hebt getest:gewoon de hele tabel scannen en alle rijen negeren die niet overeenkomen.
Je zou dat moeten kunnen zien door te doen
EXPLAIN select * from books where price = 10
met en zonder index. U kunt ook het volgende proberen:
EXPLAIN select * from books IGNORE INDEX(books_price_index) where price = 10
EXPLAIN select * from books FORCE INDEX(books_price_index) where price = 10
Maar, ... Het lijkt erop dat de Optimizer de index niet negeerde. Ik zie dat de "kardinaliteit" van price
is "1", wat inhoudt dat er slechts één afzonderlijke waarde in die kolom is. Deze 'statistiek' is onjuist of misleidend. Voer dit uit en kijk wat er verandert:
ANALYZE TABLE books;
Dit zal de statistieken herberekenen via een paar willekeurige sondes, en misschien verander die "1" in misschien "2".
Algemeen advies:pas op voor benchmarks die worden vergeleken met gefabriceerde gegevens.