Mysql SELECT查询表结构的Brighthouse优化
我有一个在MySQL->中包含数百万条记录的表,使用wiki页面中的注释导入Infobright,没问题 下面是表格语法Mysql SELECT查询表结构的Brighthouse优化,mysql,sql,infobright,Mysql,Sql,Infobright,我有一个在MySQL->中包含数百万条记录的表,使用wiki页面中的注释导入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`
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
现在,我需要运行一个select查询450次,每次使用一个不同的“a”作为约束:
SELECT d,e FROM `myTable` WHERE a = 'myString';
目标是加快调用所有查询的总时间。
但我有问题。当我运行select查询大约450次时,平均需要
每次查询0.52秒
然而,当我通过MySQL运行它时,每次查询大约需要1.7毫秒
我怎样才能优化它以击败MySQL时间?
是否需要我使用'IN'子句,而不是'='并在d,e的顶部额外选择'a'呢?
例如:
Infobright擅长处理数字数据(特别是在查询条件方面)。它们不支持传统的BTREE索引,因为它们使用“知识网格”元数据系统。当您运行
其中a='myString'
时,您将强制引擎打开每个packrow(通常每个packrow有50000行数据),并对每个记录进行字符串比较
MySQL确实支持BTREE索引,这将为您在这里提到的基于文本的查询条件提供更好的性能。假设您已经说过需要运行450次查询,那么我将假设您至少有450个“a”的唯一值
如果您有一个这样的文本列,其中包含一组非常小的唯一值(例如……某种状态指示器),那么将该列定义为查找列将大大有助于您
`a` varchar(255) COLLATE latin1_bin DEFAULT NULL COMMENT 'lookup'
注意:这种表设置为低基数列提供了最佳性能,最好为varchar()分配较小的大小,而不是255
对于这组查询,您最好还是坚持使用MySQL,或者在Infobright中重新处理数据以将这些值转换为数字数据
因为这个问题已经问了4个月了,我只是把它贴出来,作为其他偶然发现它的人的参考
`a` varchar(255) COLLATE latin1_bin DEFAULT NULL COMMENT 'lookup'