SELECT查询的表结构中的Brighthouse优化

时间:2014-01-10 16:08:57

标签: mysql sql infobright

我在MySQL中有一张包含数百万条记录的表 - >使用维基页面中的注释导入Infobright,没问题!

这是表格语法

CREATE TABLE `myTable` (
  `a` varchar(255) COLLATE latin1_bin DEFAULT NULL,
  `b` varchar(255) COLLATE latin1_bin DEFAULT NULL,
  `c` bigint(20) NOT NULL,
  `d` bigint(20) NOT NULL,
  `e` int(10) NOT NULL
) ENGINE=BRIGHTHOUSE

现在我需要运行450次选择查询,每次使用不同的“a”约束时如下:

SELECT d,e FROM `myTable` WHERE a = 'myString';

目标是加快调用所有查询的总时间。 但我遇到了问题。当我运行选择查询大约450次时,平均需要 每次查询0.52秒!

但是当我通过My​​SQL运行时,每个查询大约需要1.7毫秒!

如何优化此功能以超越MySQL时间? 是否需要我使用'IN'条款,而不是'=',另外选择'a'在d,e?on? 例如:

SELECT a,d,e FROM `myTable` WHERE a IN ('myString1','myString2'.... etc )

1 个答案:

答案 0 :(得分:2)

Infobright擅长处理数字数据(特别是在查询条件方面)。它们不支持传统的BTREE索引,因为它们使用的是知识网格"元数据系统。当您运行WHERE a = 'myString'时,您强制引擎打开每个打包机(通常每包装50,000行数据)并对每条记录进行字符串比较。

MySQL确实支持BTREE索引,这将为基于文本的查询条件提供更好的性能,就像您在此处所述。鉴于您已经说过需要运行450次查询,我将假设您至少有450个“a”的唯一值。

如果您的文本列具有非常小的唯一值集(例如......某种状态指示符),那么将列定义为LOOKUP列将大大受益

`a` varchar(255) COLLATE latin1_bin DEFAULT NULL COMMENT 'lookup'

注意:这种表格设置为低基数列提供了最佳性能,最好是varchar()的小尺寸分配,而不是255。

对于这组查询,您可能最好不要使用MySQL,或者重新处理数据以将这些值转换为Infobright中的数字数据。

由于这个问题大约有4个月之久,我有点只是将其作为参考,以便其他人偶然发现它