跳到主要内容

SQL实战经验 - 避免使用SELECT *的9个理由及2个例外情况

· 阅读需 9 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

Copyright © 2023 PawSQL

我们经常会看到一些文章警告使用SELECT * 是一种错误的习惯,应该明确地指定查询的列名,譬如在最新《阿里java开发手册(泰山版)》中对此是作为强制性的规则。不过,大家对其原因只是一知半解。本文将从两个角度解释避免使用SELECT *的9个理由,同时讨论两个合理使用SELECT *的例外场景。

性能问题

从性能的角度,在应用中使用SELECT *可能会引起查询的性能问题,主要表现在以下六个方面,

SQL实战经验 - 执行计划的节点类型

· 阅读需 4 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

PostgreSQL

数据访问

SEQ SCAN: 通过顺序扫描输入记录集来查找相关记录,顺序扫描(与索引扫描不同)执行单个读取操作。 CTE SCAN: 对公共表达式(CTE)查询结果执行顺序扫描。请注意,CTE的结果被计算并临时存储(Materialization)。 INDEX SCAN: 根据索引查找相关记录。索引扫描执行两次读取操作:一次读取索引,另一次从表中读取实际值。

SQL优化技巧 - 如何创建高效的索引

· 阅读需 19 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

Copyright © 2023 PawSQL

本文介绍索引创建时需遵循一些准则,以达到最佳的查询性能和数据维护效率。本文基于最常用的B+树索引来举例,其他索引的使用有一定的限制条件,具体请参考《数据库索引的类型》。

基于您的工作负载创建索引

创建高效的索引最重要的原则是,基于您的工作负载(workload)创建索引,而不是基于您的表结构。 索引的目的是为了提升数据库中操作的效率,因此任何其他不以工作负载出发的索引创建方法都是错误的。

SQL实战经验 - SQL查询中关于NULL的4个陷阱

· 阅读需 13 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

Copyright © 2023 PawSQL

NULL值处理是应用开发人员最容易出错误的地方,主要的原因是大家习惯使用二元的布尔逻辑来思考判断,而数据库对于NULL值的处理逻辑是三值逻辑。事实上,数据库优化器中缺陷最多的其实也是和NULL值处理相关的逻辑。即使是有着几十年历史的DB2/Teradata等成熟的数据库软件,仍然有超过20%的缺陷和NULL处理相关。

本文深度解析NULL值陷阱出现的根本原因,总结了简单有效的判断逻辑;同时针对日常开发中四种常见陷阱,解释其适用条件及解决方案;最后介绍了PawSQL中和NULL值处理相关的优化规则及其实现原理。看完本篇文章,解决关于NULL值处理的所有疑问。

SQL优化评测 - PawSQL针对TPCH的优化评测

· 阅读需 10 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

概述

TPCH (TPC Benchmark H) 是一项针对决策支持系统的数据库基准测试。它由TPC (Transaction Processing Performance Council) 于1994年首次发布。TPCH测试由一组22个复杂的业务查询和若干数据维护查询组成,用于衡量关系数据库管理系统在复杂的分析查询下的性能。这些查询模拟了一个批发供应商的数据仓库中的真实查询,涵盖订单分析、供应链管理、部分销售分析等方面。数据库厂商会使用TPCH测试自己产品,评估不同服务器、存储配置、并行处理、资源调度对数据库性能的影响。

本文将在硬件配置、数据库参数保持不变的情况下,仅仅从查询重写和索引推荐的角度,评估PawSQL的优化建议对于TPCH测试集的性能提升作用。