STRAIGHT_JOIN
- подсказка, обеспечивающая порядок JOIN
в MySQL
.
PostgreSQL
разработчикам не нравятся подсказки, поэтому PostgreSQL
не имеет этой функции.
Если вы не знаете / не заботитесь о порядке JOIN
, просто опустите это ключевое слово:
SELECT s.*, date_part('epoch', s.date) AS unixdate,
date_part('epoch', s.expire) as expireunix, u.username, u.fullname,
u.photo, u.email, t.topic, t.imageurl
FROM stories s, users u, topics t
WHERE s.uid = u.uid
AND s.tid = t.tid
MySQL
не реализует никаких JOIN
методов, кроме NESTED LOOPS
, но PostgreSQL
делает.
JOIN
заказ не имеет смысла для MERGE JOIN
и не может быть принудительно введен в PostgreSQL
для HASH JOIN
.
Вы можете сделать некоторые столбцы несортируемыми, и это заставит PostgreSQL
использовать предполагаемый порядок JOIN
, если оптимизатор выберет NESTED LOOPS
:
SELECT s.*, date_part('epoch', s.date) AS unixdate,
date_part('epoch', s.expire) as expireunix, u.username, u.fullname,
u.photo, u.email, t.topic, t.imageurl
FROM stories s, users u, topics t
WHERE s.uid = (u.uid + 1) - 1
AND t.tid = (s.tid + 1) - 1
Это заставит JOIN
ордер на случай, если оптимизатор выберет NESTED LOOPS
.
Чтобы заставить NESTED LOOPS
, избавиться или уравнение в запросе:
SELECT s.*, date_part('epoch', s.date) AS unixdate,
date_part('epoch', s.expire) as expireunix, u.username, u.fullname,
u.photo, u.email, t.topic, t.imageurl
FROM stories s, users u, topics t
WHERE s.uid > u.uid - 1
AND s.uid < u.uid + 1
AND t.tid > s.tid - 1
AND t.tid < s.tid + 1