首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UniData UniQuery -两个

UniData UniQuery -两个
EN

Stack Overflow用户
提问于 2011-10-17 11:08:56
回答 2查看 1.8K关注 0票数 1

好吧,我对SQL语言知之甚少,我想知道为什么在unidata中的两个和一个的速度慢的可能的原因。

数据库大约有100万行。

Ie/

SELECT somewhere WITH Column1 = "str" AND WITH Column2 = "Int" 5<分钟数

SELECT somewhere WITH Column1 = "str" ~1秒

某处被索引了(据我所知)

那么我是不是做错了什么?

如果需要更多信息,只需询问,不确定要提供什么。

另外,WITH和WHERE之间的区别是什么?

EN

回答 2

Stack Overflow用户

发布于 2011-10-17 14:21:21

这不是SQL,它是UniQuery。

为了澄清这一点,您不能对文件(在本例中为somewhere)进行索引,只能对文件的列进行索引。您可能会发现Column1已被索引,而Column2未被索引。键入LIST.INDEX somewhere以查看已为哪些列编制了索引。

对于您的问题,您只比较了在Column1上选择和在Column1 & Column2上选择,并假设响应速度极慢纯粹是因为您在2列上选择。你的下一个文本应该是只在Column2上选择,然后看看它有多慢。

除了索引之外,还有许多可能的原因来解释响应的差异。在被定义为“字典项”的字典列中,有字典项的different types。最基本的是D型字典项,它只是对记录中字段的直接引用。另一种类型是I或V类型,它是派生字段。派生字段可以简单到返回一个常量,也可以复杂到执行等价物,执行与另一个文件的连接和/或某种形式的复杂计算。这应该很容易看出,不同的列可能需要非常不同的处理量来处理。

其他原因包括列在记录中的深度(第一个字段引用将比记录中后面的字段更快),以及可能影响SELECT时间的查询缓存。

有关更多信息,请查看Rocket Software上的数据库手册。

票数 4
EN

Stack Overflow用户

发布于 2011-11-10 10:08:34

对索引字段的单个列选择甚至不需要读取任何数据文件记录。如果深入了解一下,您会发现索引文件是一个普通的散列文件,单列SELECT仅仅意味着读取了键为"str“的索引文件记录。这可能会在不到一秒的时间内返回成千上万的密钥。

一旦添加了第二列,您可能会强制系统读取所有这些成千上万的记录,即使第二列已被索引。这将需要更多的时间。

通常,具有少量唯一值的字段上的索引的用法值得怀疑。如果第二列包含具有大量可能值的数据,导致每个特定索引值的记录数量较少,则最好将SELECT安排为使用第二列的索引。我不确定,但可以简单地颠倒SELECT语句中列的顺序来做到这一点。否则,您可能需要连续运行两个SELECT语句。

例如,假设该文件有600,000条Column1 = "str“的记录和2,000条Column2 =”int“的记录:

代码语言:javascript
复制
>SELECT somewhere WITH Column2 = "int"
>>SELECT somewhere with Column1 = "str"

将读取2,000条记录,并且几乎可以立即返回。

如果Column1和Column2的组合是您经常使用的SELECTing,那么您可能需要创建一个组合了这两个元素的新字典项,并在此基础上构建索引。

也就是说,U2系统不应该花费5分钟来运行一个包含一百万条记录的文件。很有可能文件已经严重溢出,需要用更大的模来调整大小以提高性能。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7789005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档