我有两个MySQL查询,这两个数据插入到表中。都具有以下格式:

CREATE TABLE IF NOT EXISTS `data` (
`id` BIGINT NOT NULL AUTO_INCREMENT UNIQUE,
PRIMARY KEY (`id`)
)
SELECT `field1`, `field2`
WHERE `active` = 1

这两个查询之间的唯一区别是如何field1field2被确定,并且所述条件子句中一些细微的差别。两个运行到12K和多个记录。

现在,这将是更有效的:

一个。单独运行两个查询:

if (mysql_query($query1)) {
    return mysql_query($query2);
}
return false;

B中。 OR两个查询与UNION结合,并运行一次:

$query = 'SELECT `field1`, `field2` WHERE `active` = 1
            UNION 
            SELECT DO_ONE(`field1`), DO_TWO(`field2`) WHERE `active` = 1
            ORDER BY `field1`';
return mysql_query('CREATE TABLE IF NOT EXISTS `data` (
`id` BIGINT NOT NULL AUTO_INCREMENT UNIQUE,
PRIMARY KEY (`id`)
) ' . $query)

从一个查询的数据是不从另一个数据无用,所以既需要成功。 DO_ONEDO_TWO是,根据一些规格改变字段数据用户定义的MySQL函数。

有帮助吗?

解决方案

Aaronmccall的答案很可能是一般最好的 - UNION方法做这一切在一个SQL调用。一般来说,这将是最“有效”的,但也有可能是会发挥作用,影响的“有效”的措施为具体应用方面的问题。

具体来说,如果工会需要一个临时表来收集中间结果,你是非常大的数据集的工作,然后做两个独立的直的SELECT到新表可能变成是你的具体情况更加高效。这将取决于内部工作,优化完成后,等在数据库引擎中(这可能取决于你所使用的数据库引擎的版本变化)。

最后,回答你的问题上这样那样的具体问题的唯一办法可能是为特定的应用和环境做计时。

您可能还需要考虑为两个单独的查询需要VS的“多合一”的时间之间的区别查询可能会在事物的宏伟计划是微不足道的......你可能谈到几的差异毫秒(甚至微秒?),除非你的mysql数据库是一个拥有巨大延迟问题一个单独的服务器上。如果你正在做的数以千计的电话一个炮打响,那么差异可能是显著的,但如果你只是做一个或两个这样的电话,你的应用程序正在执行其他的事情花费99.99%,它的时间,那么之间的差异2甚至可能不会被察觉。

---劳伦斯

其他提示

在UNION方法应该绝对更快由于使从PHP两个MySQL API调用与一个为代价的。

您选择做不同的事情。如果第一查询执行正确地(这是BTW独立它返回,可以返回一个空行集的结果)第一个返回来自第二查询的结果。第二个返回第一个查询和第二查询在一起的结果。第一个选项似乎对我没什么用,也许你想达到什么是你与UNION做了什么(除非我missunderstood你)。

编辑:看了您的评论之后,我觉得你是这样的事情后:

选择如此,其中(EXISTS(SELECT FIELD1,FIELD2 ...)和EXISTS(SELECT字段1,字段2 ...))。

这样,你将有只有一个查询到数据库,这能更好地伸缩,连接池中的资源占用较少,如果你有你的数据库引擎在不同的服务器不加倍延迟的影响,但你仍然会如果第一条件失败,这是你在哪里寻找与嵌套中分离的查询的性能改善中断查询。

作为一种优化,尝试有第一,将执行得更快的条件下,在情况下,它们是不相同的。我认为,如果它们中的一个需要的那些字段计算会变慢。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top