开发者社区 > PolarDB开源 > PolarDB 分布式版 > 正文

在PolarDB中,在每个表上使用的字段上加了COLUMNAR=1,是哪儿使用的不正确的吗?

有个三表关联后取topn的sql,行式使用了0.04 sec,列式2.36 sec,列式查询反而变慢了,explain的结果在下面图里的lQLPJxg2Dgeo4GvMqs0EO7DMXRxyyFZPNQV7HIFZQnoA_1083_170.png
实例:pi-bp19d574401edl668
在PolarDB中,我在每个表上使用的字段上加了COLUMNAR=1,是哪儿使用的不正确的吗

展开
收起
小小爱吃香菜 2024-01-02 22:42:32 225 0
3 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在PolarDB中,可以在创建表或修改表结构时,通过COMMENT字段添加COLUMNAR=1来为表中的每个字段启用列存索引。例如,使用CREATE TABLE语句或者ALTER TABLE语句在表的COMMENT字段中增加COLUMNAR=1的字段。如:

    CREATE TABLE t4 COMMENT 'COLUMNAR=1' SELECT col1, col2 FROM t3;
    

    在这个例子中,表t4的所有列(col1, col2,以及后续新增的列)都会创建列存索引。如果某个字段上已经存在注释内容,你可以在现有注释内容后面添加COLUMNAR=1或COLUMNAR=0,为了清晰可见,建议将COLUMNAR=1或COLUMNAR=0添加到注释内容的前面。

    2024-01-03 13:11:43
    赞同 展开评论 打赏
  • 在PolarDB中,COLUMNAR=1是一个表的存储参数,它告诉PolarDB使用列式存储。列式存储是一种将每一列的数据存储在一起的数据库存储方式,而不是像行式存储那样将每一行的数据存储在一起。这种方式在某些情况下可以提高查询性能,特别是在进行大量列的选择性查询时。

    然而,列式存储并不总是比行式存储更快。在一些情况下,列式存储可能会导致性能下降。例如,如果你的查询涉及到大量的行,或者你的查询需要访问同一行中的多个列,那么行式存储可能会更快。

    在你的例子中,你的查询可能更适合行式存储。这是因为你的查询涉及到三表关联,并且需要获取结果的前N行,这可能需要访问多行数据。在这种情况下,行式存储可能会更快,因为它可以一次性读取多行数据,而列式存储则需要多次读取同一列的数据。

    另外,你的查询可能没有充分利用列式存储的优势。列式存储通常在处理大量列的选择性查询时表现更好,例如只查询某一列的数据。在你的查询中,你可能需要访问多列的数据,这可能会降低列式存储的性能。

    总的来说,你应该根据你的查询需求和数据特性来选择是否使用列式存储。如果你发现列式存储的性能不如预期,你可以尝试调整你的查询,或者考虑使用行式存储。

    2024-01-03 09:00:22
    赞同 展开评论 打赏
  • 这条sql,列存很难跑到40ms的,看看Last_query_cost是多少,应该想办法怎么走到行存上去。此回答整理自钉群“PolarDB专家面对面 - HTAP(列存索引)”

    2024-01-02 23:38:13
    赞同 展开评论 打赏

PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。

相关电子书

更多
云栖大会:开源 PolarDB 架构演进、关键技术与社区建设 立即下载
2023云栖大会:和客户一起玩转PolarDB新特性 立即下载
2023云栖大会:PolarDB for AI 立即下载