创建几个虚拟变量列是检索数据的有效方法吗?

时间:2014-04-18 12:46:42

标签: mysql

也许我没有使用正确的条款,但我一直在互联网上搜索这个主题,但我没有找到太多信息。

这是一些背景信息;我有一个大型数据库(大约500万条目),我必须根据几个不同的标准做很多目标。

所以在我的脑海中(完全非正式的SQL训练方式)我认为创建几个虚拟列给它的值为1或0是好的。这样当我搜索时我的where子句正在搜索WHERE x = 1或y = 1或z = 1。我有点认为它在前面做了一些工作,我使用UPDATE表SET列= 1 WHERE变量(LIKE或=)'blank'

就像我说的那样,我没有找到太多关于此的文献。因此它似乎不是SQL的标准操作过程,但我很确定这是一种比搜索文本字符串更快更有效的搜索检索数据的方法。所以我想知道为什么人们不这样做作为标准程序?或者他们也许我不知道。

我知道这有点开放,如果我对这个问题困扰任何人,我会提前道歉。还要感谢任何能够回答或给我一些反馈的人。

2 个答案:

答案 0 :(得分:1)

假设您正在谈论简单的搜索条件(例如"工资> 10000"),那么使用单独的变量在性能上没有优势。事实上,它们占据了一排空间,较长的行需要更多的开销。

这些标志可能有助于解决更复杂的问题。例如,如果您有复杂的文本比较,那么预先计算结果可能有助于提高性能。同样,如果条件需要交叉多个表,特别是聚合,那么预先计算的值可能会有所帮助。

您的性能问题的解决方案可能是索引。但是,您没有提供足够的信息来确定这些信息是否真的有用。

答案 1 :(得分:0)

这可能是一种有效的方法,特别是如果目标是返回"计数"满足指定条件的行数。

我实际上已经为数据仓库系统实施了这种方法。 (我们没有更新详细信息行,我们在详细信息表中填充了一个"指标"表。我们主要在查询中使用0 / 1指标列返回SUM()聚合其中几个,以按维度返回一组计数。这些查询中的WHERE子句是维度,而不是0 / 1指标列。(显然,指标列可用于WHERE子句,我们也确实使用了它们。)

使用生产在线系统的摘录,通过预定流程(每晚)添加/更新数据仓库中的数据。所有细节数据都已加载,但我们还创建了" summary"包含键和整数值的表,包含0和1。

(如果没有摘要表中的那些列,则返回指定结果集所需的SQL语句大于我们使用的Teradata数据库上的SQL语句所允许的最大大小。这是我们实现表的重要原因,但效率很高。

我们运行的查询是"汇总"从非常低级别到高级摘要级别(每天,每周,每月,每年)和(每个技术,每个经理,每个区域)和(每个COE,每个NPA)输入几个维度的查询,每个州)。

在最低级别,我们有很多"零"我们不得不返回,其中一列为"技术人员在1"工作"当天和机票在发货当天成功登记,10天内没有提交重复机票,而另一栏则相同,但10天内有重复机票,等等。

我们实际上已将界面设计在其中一个"单元格中。用"计数"在显示中可以选择,并且我们会返回包含在" count"中的详细行的报告。

当时还没有关于这种方法的任何文献;我只是弄清楚该怎么做。同样,这是针对具有数千万行的数据仓库,即席查询环境。我们有一个在线窗口,系统必须可用(早上7点到晚上7点)。

相关问题