To záleží na indexech. Pokud mají oba sloupce nastavené indexy, měli byste přetypovat na int
, protože potřebuje porovnat pouze 4 bajty. Pokud však pouze varchar
sloupec je indexován, přetypován na varchar
.
Na konci byste měli svůj dotaz explain
ed, abyste viděli, jaký index se používá, a podle toho přetypujte.
Pokud není nastaven žádný index, přetypování na int
je obecně lepší přístup. Pokud však není nastaven žádný index, je to vlastně jedno, indexováním byste ušetřili mnohem více času než výběrem správného způsobu přetypování. Až na to, že stoly jsou opět malé. Pak na tom vlastně ani nezáleží.
Ve skutečnosti bychom měli vzít v úvahu nejen náklady na srovnání, ale také na casting:Casting an int
na varchar
je o něco rychlejší než analýza varchar
na int
. Porovnáním varcharu, který má alespoň 4 znaky, však bude tato výhoda zbytečná. Pokud mají vaše hodnoty tendenci být vyšší než 999, přetypujte na int
bude rychlejší. Ale to nyní závisí na vašem operačním systému, architektuře, instrukční sadě používané vaší binárkou mysql a tak dále. Jediný způsob, jak získat skutečně spolehlivou odpověď, je:Porovnat tuto situaci na cílovém počítači.