【问题标题】:Performance measure Mysql View VS UNION of table性能测量 Mysql View VS UNION 的表
【发布时间】:2013-10-31 09:16:08
【问题描述】:

我尝试制作一个数据库方案。我只是想知道哪种方法比其他方法更好。 我有两种方法可以从我的数据库中完成搜索任务。 条件如下: 我有多个表名作为 table1,table2..tablen 具有相同的结构,表示不同的位置。

我的工作方式如下:

  1. 使用我的 TABLESUNION 制作 VIEW 并使用如下查询: Select * from my_view where my_condition;"。
  2. 通过使用简单的 UNION 运算符并使用如下查询:

    select * from table1 where my_condition UNION select * from table2 where my_condition UNION ... .. select * from tablen where my_condition

所以我的问题是我想要一个更快的解决方案,请帮助我在 VIEW 和 UNION 之间进行选择。如果您有任何其他解决方案,例如 mysql cluster SCALABLITY,请告诉我。

【问题讨论】:

  • 如果您有多个具有相同结构的表,那么您有一个设计问题...创建一个表,并在该表中添加一个位置列 - 那么使用 UNION 就变得多余了
  • @MarkBaker 我们已经在我之前的帖子中讨论过这个话题。但是我有很多数据的问题,我害怕响应速度。我想要一个胖子响应数据库方案。
  • 是的,我们已经讨论过了;然后您选择忽略我使用单个表的建议。如果您不拆分多个表,您将获得一个响应更快、响应速度更快的数据库,UNION 将是一个很大的开销,因为您必须执行 n 个单独的选择(其中 n 是您要合并的表的数量)然后加入每个结果......虽然 MySQL 可以通过并行化等技术为您稍微减少这种开销,但它永远不会接近访问单个表的速度
  • 您认为数百万条记录是“大数据”,会给您带来性能问题。不是大数据!如果组织和索引正确,单个表不会出现性能问题......如果你觉得你需要做某事(即使它可能对你的小数据量来说可能是矫枉过正),我建议分片,你忽略了这个建议。 .. 然而,您选择采取的方法会产生严重的性能影响,并且管理和管理的问题要大得多
  • @MarkBaker 我喜欢你对分片的建议,但由于我是新手,所以我不太了解分片和并行化是如何工作的。你能告诉我如何在单个表中正确索引我的数据.

标签: php mysql sql sql-server


【解决方案1】:

View 只是一个 saved Named SELECT statement 。当您调用视图时,它只是简单地执行其定义中的 SELECT 语句,视图没有这样的性能优势,但有一些安全性和代码简单性优势。除非您创建 Indexed View 这可以提高您的视图的性能以及其他可以从您的视图上创建的索引中受益的查询。 警告 索引视图带有一长串限制。
联合运算符垂直组合来自两个或多个选择查询的结果集。如果您想要更好的性能,您需要查看表上可用的索引以进行查询。
仔细检查您的查询的执行计划将是您案例的最佳起点,因为它会让您了解 SQL SERVER 必须经过哪些步骤才能获得所需的结果集。

【讨论】:

  • 你能告诉我olx 或任何其他分类网站数据库的工作原理吗?
  • 抱歉,朋友从来没有听说过这些网站。
  • 没问题,您曾经使用过任何分类网站或黄页。我想要像这些网站这样的数据库架构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-10
  • 1970-01-01
相关资源
最近更新 更多