有个三表关联后取topn的sql,行式使用了0.04 sec,列式2.36 sec,列式查询反而变慢了,explain的结果在下面图里的
实例:pi-bp19d574401edl668
在PolarDB中,我在每个表上使用的字段上加了COLUMNAR=1,是哪儿使用的不正确的吗
在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添加到注释内容的前面。
在PolarDB中,COLUMNAR=1
是一个表的存储参数,它告诉PolarDB使用列式存储。列式存储是一种将每一列的数据存储在一起的数据库存储方式,而不是像行式存储那样将每一行的数据存储在一起。这种方式在某些情况下可以提高查询性能,特别是在进行大量列的选择性查询时。
然而,列式存储并不总是比行式存储更快。在一些情况下,列式存储可能会导致性能下降。例如,如果你的查询涉及到大量的行,或者你的查询需要访问同一行中的多个列,那么行式存储可能会更快。
在你的例子中,你的查询可能更适合行式存储。这是因为你的查询涉及到三表关联,并且需要获取结果的前N行,这可能需要访问多行数据。在这种情况下,行式存储可能会更快,因为它可以一次性读取多行数据,而列式存储则需要多次读取同一列的数据。
另外,你的查询可能没有充分利用列式存储的优势。列式存储通常在处理大量列的选择性查询时表现更好,例如只查询某一列的数据。在你的查询中,你可能需要访问多列的数据,这可能会降低列式存储的性能。
总的来说,你应该根据你的查询需求和数据特性来选择是否使用列式存储。如果你发现列式存储的性能不如预期,你可以尝试调整你的查询,或者考虑使用行式存储。
这条sql,列存很难跑到40ms的,看看Last_query_cost是多少,应该想办法怎么走到行存上去。此回答整理自钉群“PolarDB专家面对面 - HTAP(列存索引)”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
PolarDB 分布式版 (PolarDB for Xscale,简称“PolarDB-X”) 是阿里云自主设计研发的高性能云原生分布式数据库产品,为用户提供高吞吐、大存储、低延时、易扩展和超高可用的云时代数据库服务。