Эффективная производительность и быстрый поиск записей в базе данных MySQL с использованием комбинации запросов UNION и JOIN? - PullRequest
0 голосов
/ 09 мая 2020

Ситуация: мне нужно получить и отобразить данные на веб-странице, используя PHP из трех таблиц в базе данных MySQL (версия 8.0+), запущенной на локальном сервере (appserve).

проблема: у меня есть рабочий запрос, но получение данных занимает слишком много времени. У меня более 44000 записей, и моя машина - Windows 7, 64-битная, Intel Core i3 с 4 ГБ памяти (я упоминаю об этом, потому что, возможно, это естественно для более низкой машины, чтобы действовать таким образом).

Первые две таблицы состоят из author (автор книги), author_id (уникальный идентификатор автоинкремента для автора) и title (название книги), они совпадают, за исключением идентификатора, идентификатора первая - это INT, а вторая - VARCHAR, поэтому даже я хотел объединить то, что я не могу, в то время как третья таблица состоит из других разных деталей о книге, но в этом примере я использовал только author_id и pub_date (книга дата публикации), чтобы продемонстрировать ситуацию.

Книга может встретить несколько редакций, поэтому связь между title и pub_date - один ко многим, но на веб-странице я хочу отображать только самую последнюю редакцию или дату публикации, поэтому я использую MAX и GROUP BY.

Мой запрос:

SELECT a.author, 
       a.title,
       a.author_id,  
       b.pub_date 
  FROM 
     ( SELECT author,
              title,
              author_id 
        FROM authors_table 
        UNION 
       SELECT author,
              title,
              author_id 
        FROM old_authors_table
       ) a 
    LEFT 
    JOIN ( SELECT author_id,
                  max(pub_date) AS pub_date 
    FROM details_table 
  GROUP 
    BY author_id
     ) b 
   ON b.author_id = a.author_id;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...