os.path.realpath(path)
os.path.realpath возвращает канонический путь указанного имени файла, исключая любые символические ссылки, встречающиеся в пути.
Если планировщик выполнения говорит, что они - то же, они - то же. Используйте, какой бы ни каждый сделает Ваше намерение более очевидным - в этом случае, второе.
На самом деле я полагаю, что это было бы самым быстрым:
SELECT ProductID, ProductName
FROM Northwind..Products p
outer join Northwind..[Order Details] od on p.ProductId = od.ProductId)
WHERE od.ProductId is null
В Вашем определенном примере они - то же, потому что оптимизатор выяснил то, что Вы пытаетесь сделать, то же в обоих примерах. Но возможно, что в нетривиальных примерах оптимизатор не может сделать этого, и в этом случае существуют причины предпочесть ту другому при случае.
NOT IN
должен быть предпочтен, если Вы тестируете несколько строк в своем внешнем выборе. Подзапрос в NOT IN
оператор может быть оценен в начале выполнения, и временная таблица может быть проверена по каждому значению во внешнем выборе, вместо того, чтобы повторно выполнить подвыбор каждый раз, как требовался бы с NOT EXISTS
оператор.
, Если подзапрос должен коррелироваться с внешним выбором, то NOT EXISTS
может быть предпочтительным, так как оптимизатор может обнаружить упрощение, которое предотвращает создание любых временных таблиц для выполнения той же функции.
Это зависит..
SELECT x.col
FROM big_table x
WHERE x.key IN( SELECT key FROM really_big_table );
не было бы относительно медленным не очень для ограничения размера того, в чем проверке запроса видеть, вводят ли они, находится. СУЩЕСТВУЕТ было бы предпочтительно в этом случае.
, Но, в зависимости от оптимизатора DBMS, это могло не отличаться.
, Поскольку пример того, когда СУЩЕСТВУЕТ, лучше
SELECT x.col
FROM big_table x
WHERE EXISTS( SELECT key FROM really_big_table WHERE key = x.key);
AND id = very_limiting_criteria
Если оптимизатор говорит, что они - то же, тогда рассматривают человеческий фактор. Я предпочитаю видеть НЕ, СУЩЕСТВУЕТ:)