Det beror på indexen. Om båda kolumnerna har index inställda bör du casta till int
, eftersom den bara behöver jämföra 4 byte. Om dock endast varchar
kolumnen indexeras, cast till varchar
.
I slutet bör du få din fråga explain
ed, för att se vilket index som används, och cast därefter.
Om inget index är inställt, casta till int
är det bättre tillvägagångssättet i allmänhet. Men om det inte finns något index inställt spelar det egentligen ingen roll, du skulle spara mycket mer tid genom att indexera än genom att välja rätt sätt att casta. Förutom, återigen, tabellerna är små. Sedan spelar det inte så stor roll heller.
Faktum är att vi inte bara bör ta hänsyn till kostnaderna för jämförelse, utan också för gjutning:Casting an int
till en varchar
är något snabbare än att analysera en varchar
till en int
. Men att jämföra en varchar som har minst 4 tecken kommer att göra den fördelen värdelös. Om dina värden tenderar att vara högre än 999, casta till int
kommer att bli snabbare. Men det beror nu på ditt operativsystem, arkitekturen, instruktionsuppsättningen som används av din mysql-binär och så vidare. Det enda sättet att få ett riktigt tillförlitligt svar är:Benchmarkera den situationen på målmaskinen.