Как конвертировать SELECT в SELECT JOIN? - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь преобразовать мой SELECT запрос в более быструю версию SELECT, включая JOIN, которую я нашел в Интернете.

Вот мой код:

$stmt->prepare("SELECT * FROM books WHERE person_id = :person_id ORDER BY id DESC LIMIT 5, 10");

преобразовать в :

SELECT  l.id, value, LENGTH(stuffing) AS len
FROM    (
        SELECT  id
        FROM    t_limit
        ORDER BY
                id
        LIMIT 150000, 10
        ) o
JOIN    t_limit l
ON      l.id = o.id
ORDER BY
        l.id

Я нашел этот код онлайн (последний фрагмент кода). Это должно помочь с производительностью при выполнении OFFSET и LIMIT. в любом случае ... вот что я пробовал :

$stmt->prepare("SELECT * FROM (SELECT id FROM books WHERE person_id = :person_id ORDER BY id DESC LIMIT 5, 10) o WHERE person_id = :person_id JOIN books l ON l.id = o.id ORDER BY l.id");

но, похоже, не работает.

любая помощь будет оценена!

Ответы [ 3 ]

0 голосов
/ 05 мая 2018

если кому интересно, я исправил. Я поставил предложение WHERE в неправильном месте.

Это исправленная версия:

$stmt->prepare("SELECT * FROM (SELECT id FROM books WHERE person_id = :person_id ORDER BY id DESC LIMIT 5, 10) o JOIN books l ON l.id = o.id WHERE person_id = :person_id ORDER BY l.id");
0 голосов
/ 05 мая 2018

Вот две статьи, описывающие метод поиска:

https://blog.jooq.org/2013/10/26/faster-sql-paging-with-jooq-using-the-seek-method/

и

https://use-the-index-luke.com/sql/partial-results/fetch-next-page

Похоже, лучше подходит для того, что вы делаете. Я все еще рискну предположить, что это проблема индексации, с которой объяснение поможет.

0 голосов
/ 05 мая 2018

Я нашел этот код онлайн. Это должно помочь с производительностью при выполнении OFFSET и LIMIT.

Где ты это услышал? Выражение, которое вы цитировали, похоже, очень специфично для конкретной схемы базы данных и не применимо к вашей ситуации. Забудь об этом.

В существующем виде оператор SQL, который вы сейчас используете, уже оптимален. Если он не работает должным образом, вам может потребоваться создать индекс для books (person_id, id).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...