Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 优化的方式是什么:使用排序联合还是使用两个不同的查询?_Mysql_Sql_Query Optimization_Sql Execution Plan - Fatal编程技术网

Mysql 优化的方式是什么:使用排序联合还是使用两个不同的查询?

Mysql 优化的方式是什么:使用排序联合还是使用两个不同的查询?,mysql,sql,query-optimization,sql-execution-plan,Mysql,Sql,Query Optimization,Sql Execution Plan,由于表中有数以百万计的数据,我正在尝试优化以下查询。我尝试了MySql Explain,但没有得到执行查询的优化方法: 此查询使用索引合并和排序联合,因为我有以下两个索引: 1.发送和接收 2.关于REC 我尝试了两个不同的查询,而不是两次命中服务器,而不是上面使用ref类型的查询。 及 请告诉我这个问题陈述的优化查询或以上两种更好的方式,因为数据太大,我无法得出结论 谢谢 看!优化所有的查询是不可能的,只需坚持基本原则即可 1.在Where条件中的所有列上放置索引 2.正确选择数据类型。例

由于表中有数以百万计的数据,我正在尝试优化以下查询。我尝试了MySql Explain,但没有得到执行查询的优化方法:

此查询使用索引合并和排序联合,因为我有以下两个索引: 1.发送和接收 2.关于REC

我尝试了两个不同的查询,而不是两次命中服务器,而不是上面使用ref类型的查询。

请告诉我这个问题陈述的优化查询或以上两种更好的方式,因为数据太大,我无法得出结论


谢谢

看!优化所有的查询是不可能的,只需坚持基本原则即可

1.在Where条件中的所有列上放置索引

2.正确选择数据类型。例如,如果您确定并且正在更改结构,则选择CHAR1作为列类型


在这里,您对值进行了硬编码,剩下的内容不多

最佳查询将使用这两个索引,然后将结果合并在一起而不进行排序。使用union删除重复项时需要进行排序。而这又是需要的,因为有些记录可能同时满足这两个条件

以下版本应为每个组件使用每个索引。第二个已稍微重写,以避免与第一个重复:

SELECT *
FROM tbl 
WHERE (SEND = 'abc' AND TYPE IN ('A', 'D') and FLAG !='Y')
union all
SELECT *
FROM tbl
WHERE (REC = 'abc' AND TYPE = 'I' and FLAG !='Y' and SEND <> 'abc');

顺便说一下,在索引中添加TYPE、FLAG将进一步提高性能。

我将TYPE和FLAG都作为char1。因此,您建议使用sort_union的单个查询比使用两个不同的查询更好?的确!我想知道上述查询需要多少时间?以及您正在处理的确切数据量~25米的基数,大约需要0.4秒
SELECT * FROM tbl 
WHERE SEND ='abc' AND TYPE IN ('A', 'D') and FLAG !='Y'
SELECT * FROM tbl 
WHERE REC ='abc' AND TYPE = 'I' and FLAG !='Y'
SELECT *
FROM tbl 
WHERE (SEND = 'abc' AND TYPE IN ('A', 'D') and FLAG !='Y')
union all
SELECT *
FROM tbl
WHERE (REC = 'abc' AND TYPE = 'I' and FLAG !='Y' and SEND <> 'abc');