To zależy od indeksów. Jeśli obie kolumny mają ustawione indeksy, powinieneś rzutować na int
, ponieważ wystarczy porównać tylko 4 bajty. Jeśli jednak tylko varchar
kolumna jest indeksowana, rzutowana na varchar
.
Na końcu powinieneś mieć swoje zapytanie explain
ed, aby zobaczyć, jaki indeks zostanie użyty, i odpowiednio rzucić.
Jeśli nie ustawiono indeksu, rzutowanie na int
jest ogólnie lepszym podejściem. Jeśli jednak nie ma ustawionego indeksu, nie ma to większego znaczenia, indeksowanie zaoszczędziłoby znacznie więcej czasu niż wybranie prawidłowego sposobu rzutowania. Tyle że znowu stoły są małe. Wtedy to też nie ma znaczenia.
W rzeczywistości powinniśmy wziąć pod uwagę nie tylko koszty porównania, ale także rzutowania:Casting a int
na varchar
jest nieco szybsze niż parsowanie varchar
do int
. Jednak porównanie varchara, który ma co najmniej 4 znaki, sprawi, że ta przewaga będzie bezużyteczna. Jeśli Twoje wartości są zwykle wyższe niż 999, rzutuj na int
będzie szybciej. Ale teraz zależy to od twojego systemu operacyjnego, architektury, zestawu instrukcji używanego przez twój plik binarny mysql i tak dalej. Jedynym sposobem na uzyskanie naprawdę wiarygodnej odpowiedzi jest:porównaj tę sytuację na komputerze docelowym.