如何优化 mysql 两个表的联合查询,两个表中的记录都超过 750,000 条?
How to optimize mysql query with union of two tables having more than 750,000 records in both tables?
我有两个表 propeties_1
和 properties_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.status
和 propeties_2.status
标记为 INDEX
,则可以大大优化您的查询。
您可以按照以下说明轻松创建它:
CREATE UNIQUE INDEX index_status1 on propeties_1(status);
CREATE UNIQUE INDEX index_status2 on propeties_2(status);
索引是数据库搜索引擎可以用来加速数据检索的特殊查找 table。简单地说,索引就是指向table中数据的指针。数据库中的索引与书后的索引非常相似。
这是一个简单的技巧 -- 将 ORDER BY
和 LIMIT
添加到内部查询。更多讨论在这里,包括如何处理 OFFSET
:
http://mysql.rjweb.org/doc.php/pagination#pagination_and_union
并具有这些复合索引:
propeties_1: INDEX(status, col1)
propeties_2: INDEX(status, colm1)
我有两个表 propeties_1
和 properties_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.status
和 propeties_2.status
标记为 INDEX
,则可以大大优化您的查询。
您可以按照以下说明轻松创建它:
CREATE UNIQUE INDEX index_status1 on propeties_1(status);
CREATE UNIQUE INDEX index_status2 on propeties_2(status);
索引是数据库搜索引擎可以用来加速数据检索的特殊查找 table。简单地说,索引就是指向table中数据的指针。数据库中的索引与书后的索引非常相似。
这是一个简单的技巧 -- 将 ORDER BY
和 LIMIT
添加到内部查询。更多讨论在这里,包括如何处理 OFFSET
:
http://mysql.rjweb.org/doc.php/pagination#pagination_and_union
并具有这些复合索引:
propeties_1: INDEX(status, col1)
propeties_2: INDEX(status, colm1)