Собственно "простой" вопрос - рассмотрим 3 ситуации работы Left Join'ов. В качестве исходных данных есть простая табличка из 3-х колонок на 10к записей, состоящая из даты (date), текста (varchar(1000) и чисел (int) (tbl1), а так же вторая табличка на 100к записей с кучей столбцов в т.ч. и тех, которые нужны для джойна.
Задача - найти различия в данных и вывести их пользователю.
Что будет быстрее работать? Вопрос чисто теоретический.
1) Left join, в котором явно указываются связи по каждому полю, т.е.
left join tbl2 on tbl1.date=tbl2.date and tbl1.text=tbl2.text and tbl1.size=tbl2.size
2) Left join, где используются concat из всех полей, чтобы собрать одну длинную строчку для джойна по ней, т.е.:
left join tbl2 on concat(tbl1.date,tbl1.text,tbl1.size) = concat(tbl2.date,tbl2.text,tbl2.size)
3) Left join, где используются хэш-функция или проверочная сумма, т.е.
left join tbl2 on checksum(tbl1.date,tbl1.text,tbl1.size) = checksum(tbl2.date,tbl2.text,tbl2.size)