如何优化 mysql 两个表的联合查询,两个表中的记录都超过 750,000 条?

How to optimize mysql query with union of two tables having more than 750,000 records in both tables?

我有两个表 propeties_1properties_2。 Table propeties_1 有 350,000 条记录,Table 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;

此查询执行时间过长。

如何优化此查询?

如果您在数据库中将 propeties_1.statuspropeties_2.status 标记为 INDEX,则可以大大优化您的查询。

您可以按照以下说明轻松创建它:

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

索引是数据库搜索引擎可以用来加速数据检索的特殊查找 table。简单地说,索引就是指向table中数据的指针。数据库中的索引与书后的索引非常相似。

这是一个简单的技巧 -- 将 ORDER BYLIMIT 添加到内部查询。更多讨论在这里,包括如何处理 OFFSET:

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

并具有这些复合索引:

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