【问题标题】:fast way of query from multiple database从多个数据库查询的快速方法
【发布时间】:2018-03-23 23:15:23
【问题描述】:

我有两个相同的数据库 db1,表名 product1 和 db2,表名分别为 product2。使用 Column 说两个表的 id、name、price。

我将价格低于 500 的产品存储在 db1 product1 表中,将价格超过 500 的产品存储在 db2 product2 表中。

现在我需要合并两个数据库的结果并按名称对其进行排序。我在 MYSQL 中使用了以下 SQL 查询。

   SELECT * FROM (SELECT id,name,price from db1.product1
                  UNION ALL  
                  SELECT id,name,price from db2.product2) AS DATA 
   ORDER BY DATA.name LIMIT 18

对我来说效果很好,预计花费的时间比预期的要多。

还有其他最快的方法来完成这项工作吗?

感谢您抽出宝贵的时间。

【问题讨论】:

  • 你们为什么会有这么愚蠢的系统?

标签: mysql sql database


【解决方案1】:

还有其他最快的方法来完成这项工作吗?

一般不这样做。将所有内容放入一个精心设计的数据库中。有些情况需要特殊处理,但单个 DB 是最好的开始方法。

如果您完全确定存在性能问题,您可以查看分区。即便如此,它作为一种管理工具通常比一般性能工具更有用,尽管它会有特定的好处。

我们大多数人不会处理需要双数据库之类的数据来提高性能的数据。我会首先专注于制作正确的单个实例。 (即单DB,单表)

不过,具体而言,按照这些思路构建查询可能会提高性能

SELECT * FROM (
select * from (SELECT id,name,price from db1.product1    ORDER BY DATA.name LIMIT 18) as X
UNION ALL  
select * from (SELECT id,name,price from db2.product2    ORDER BY DATA.name LIMIT 18) as Y 
) AS DATA 
   ORDER BY DATA.name LIMIT 18

这样你只要求每个 DB 的最小值。

【讨论】:

  • 我的服务提供商 Godaddy 不允许我创建大小超过 1 GB 的数据库。很遗憾我必须这样做(创建多个数据库)。这将我的执行时间从 2 秒减少到 10 秒。
  • 那么您可能想选择一个满足您需求的技术提供商,而不是尝试混合您的需求以匹配可用的技术。这很少有好的结局。
  • 创建视图对我有帮助吗?
  • 没有视图不会有任何帮助。试试我编辑的答案中的建议。
  • 不,它不起作用,因为我在结尾使用了带有多个条件的 where 子句。你是正确的需要改变我的服务提供商或重新编码整个系统谢谢!
【解决方案2】:

您可以多次调用mysql_connect(),但如果参数相同,则需要为'$new_link'(第四个)参数传递true,否则重复使用相同的连接。例如:

$dbh1 = mysql_connect($hostname, $username, $password); 
$dbh2 = mysql_connect($hostname, $username, $password, true); 

mysql_select_db('database1', $dbh1);
mysql_select_db('database2', $dbh2);

然后查询数据库1传递第一个链接标识符:

mysql_query('select * from tablename', $dbh1);

对于数据库 2,通过第二个:

mysql_query('select * from tablename', $dbh2);

其他选项

如果 MySQL 用户可以访问两个数据库并且它们位于同一主机上(即两个数据库都可以从同一连接访问),您可以:

  1. 保持一个连接打开并调用 mysql_select_db() 进行交换 有必要的。我不确定这是一个干净的解决方案,你可以 最终查询到错误的数据库。
  2. 在引用您的数据库中的表时指定数据库名称 查询(例如 SELECT * FROM database2.tablename)。这很可能 实施起来很痛苦。

另外请阅读 troelskn 的回答,因为如果您能够使用 PDO 而不是较旧的扩展,这是一种更好的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 2011-01-14
    相关资源
    最近更新 更多