Я ошеломлен, увидев, что все указывают на использование JOIN
, как будто это одно и то же. ЭТО НЕТ!, не с информацией, представленной здесь. Например. Что, если у t2.column1
есть двойники?
=> Предполагая, что в t2.column1
нет двойников, тогда да, поместите UNIQUE INDEX
в указанный столбец и используйте конструкцию JOIN, поскольку она более удобочитаема и проста в обслуживании. Если это будет быстрее; это зависит от того, что делает из него механизм запросов. В MSSQL оптимизатор запросов (вероятно) считал бы их одним и тем же; возможно, MySQL «не так стремится» распознать это... не знаю.
=> Предполагая, что в t2.column1
могут быть двойники, поместите (неуникальный) INDEX
в указанный столбец и перепишите WHERE IN (SELECT ..)
в WHERE EXISTS ( SELECT * FROM t2 WHERE t2.column1 = t1.column1)
. Опять же, в основном для удобочитаемости и простоты обслуживания; скорее всего, механизм запросов будет относиться к ним одинаково...
Вещи, которые нужно помнить,
- Всегда следите за правильностью индексации (но не переусердствуйте)
- Всегда помните, что то, что происходит на самом деле, будет интерпретацией вашего sql-кода; не "прямой перевод". Вы можете написать одну и ту же функциональность по-разному для достижения одной и той же цели. И некоторые из них действительно более устойчивы к различным сценариям.
Если у вас всего 10 строк, почти все работает. Если у вас есть 10 миллионов строк, возможно, стоит изучить план запроса... который, скорее всего, будет отличаться от плана с 10 строками.
person
deroby
schedule
31.05.2014
t1.column1
иt2.column1
. Также лучше использоватьJOIN
- person Milan Halada   schedule 19.05.2014