Как оптимизировать запрос mysql с объединением двух таблиц, имеющих более 750 000 записей в обеих таблицах? - PullRequest
0 голосов
/ 05 марта 2020

У меня есть две таблицы propeties_1 и properties_2. Таблица propeties_1 содержит 350 000 записей, а таблица propeties_2 содержит 400 000 записей.

Я использую запрос следующим образом:

Select union_table.* FROM
(
    (select col1 as c1, col2 as c2, col3 as c3 from `propeties_1` where status='A')
    union
    (select colm1 as c1, colm2 as c2, colm3 as c3 from `propeties_2` where status='A')
) as union_table 
limit 12 offset 0 order by c1;

Этот запрос занимает слишком много времени при выполнении.

Как я могу оптимизировать этот запрос?

Ответы [ 2 ]

1 голос
/ 05 марта 2020

Вы можете значительно оптимизировать свой запрос, если у вас propeties_1.status и propeties_2.status помечены как INDEX в базе данных.

Вы можете легко создать его с помощью следующих инструкций:

CREATE UNIQUE INDEX index_status1 on propeties_1(status);
CREATE UNIQUE INDEX index_status2 on propeties_2(status);

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

0 голосов
/ 10 марта 2020

Это простой трюк - добавьте ORDER BY и LIMIT к внутренним запросам. Более подробное обсуждение здесь, включая то, что делать с OFFSET:

http://mysql.rjweb.org/doc.php/pagination#pagination_and_union

И иметь эти составные индексы:

propeties_1:  INDEX(status, col1)
propeties_2:  INDEX(status, colm1)
...