gpt4 book ai didi

time-series - 使用 QuestDB 时,符号列是否有利于每个行的大量行的性能?

转载 作者:行者123 更新时间:2023-12-04 14:49:36 25 4
gpt4 key购买 nike

在使用常规 SQL 数据库时,索引对于获取几行很有用,但当您从表中获取大量数据时就没那么有用了。例如,假设您有一张表,其中包含 10 只股票随时间的股票估值:

|------+--------+-------+
| time | stock | value |
|------+--------+-------+
| ... | stock1 | ... |
| ... | stock2 | ... |
| ... | ... | ... |
|------+--------+-------+

据我所知,如果您想在很长一段时间内获取数据,按股票索引(即使使用枚举/整数/外键)在像 Postgres 这样的数据库中通常不是很有用。您最终得到一个跨越表的大部分的索引,并且它最终使数据库执行顺序扫描的速度更快,例如,获取每只股票的整个数据集的平均值:

SELECT stock, avg(value) FROM stock_values GROUP BY stock

鉴于 QuestDB 是面向行的,我猜想为每只股票设置一个单独的列会带来更好的性能。

那么,对于这种情况,QuestDB 中推荐的模式是什么?每只股票一栏,或者 symbol column即使每一行有数百万个结果,每个股票代码也要一样好(或足够好)?

最佳答案

在 QuestDB 中不容易实现每只股票的一列。如果你像这样创建表

|----------------------------------|
| time | stock1 | stock1 | stock3 |
|----------------------------------|

然后你必须将所有值一起插入一行,否则你最终会出现空白

|----------------------------------|
| time | stock1 | stock1 | stock3 |
|----------------------------------|
| t1 | 1.1 | | |
| t2 | | 3.45 | |
| t3 | | | 103.45 |
|----------------------------------|

即使对于 t1 == t2 == t3,当您执行 insert as 3 操作时,它仍然会产生 3 行。

所以符号在这里是更好的选择。

符号可以被索引,也可以不被索引,当非索引符号的不同数量很少时,您可能会受益于非索引符号。读取全表与按索引读取是索引选择性的问题,而不是数据范围。如果选择性很高(例如,不同的符号计数为 10k),则按索引获取比范围扫描更快。

关于time-series - 使用 QuestDB 时,符号列是否有利于每个行的大量行的性能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69261459/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com