什么情况下索引会失效

对索引列使用函数:WHERE DATE(create_time) = '2025-01-01':应改为WHERE create_time BETWEEN '2025-01-01' AND '2025-01-02'

隐式类型转换:WHERE phone = 12345678(phone是VARCHAR: 应用引号包裹)

使用!=或<>:负向查询通常不走索引

使用LIKE '%xxx':前导通配符会导致全表扫描

OR条件中有非索引列:WHERE indexed_col = 1 OR non_indexed_col = 2

10. 如何优化跨节点JOIN的性能?

考察点:分布式SQL优化能力。

参考答案

  1. 分布键对齐:确保JOIN的两张表使用相同的分布键,避免数据重分布
  2. 小表复制:将维度表设为REPLICATION表,复制到所有DN,实现本地JOIN
  3. 谓词下推:在JOIN前先过滤数据,减少传输量
  4. 调整work_mem:增加内存,避免Hash Join溢出到磁盘
  5. 使用列存储:对分析型查询启用列存,减少I/O

11. 如何定位和解决GaussDB的慢查询?

考察点:性能排查思路,这是一个高频开放性问题。

参考答案(结合之前对话中的调优知识):

  1. 开启慢查询日志:log_min_duration_statement = 1000(记录超过1秒的SQL)
  2. 获取执行计划:EXPLAIN ANALYZE查看实际执行路径和耗时
  3. 检查统计信息:执行ANALYZE更新统计信息,防止优化器选错计划
  4. 定位瓶颈:是否全表扫描 → 检查索引是否跨节点数据重分布 → 检查分布键设计是否锁等待 → 查询pg_locks
  5. 优化SQL:改写低效写法、添加覆盖索引、调整分片策略
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务