消除无关列

1、背景

项目中做报表统计时,经常使用union al合并放到一个视图里,然而为了方便总是喜欢使用select * ,导致消耗不必要的性能。

2、问题

数据准备

css 复制代码
drop table if exists t1;
create table t1 (id int primary key,c1 varchar2(2000),c2 varchar2(2000),c3 varchar2(2000),c4 varchar2(2000),
c5 varchar2(2000),c6 clob);

drop table if exists t2;
create table t2 (id int primary key,c1 varchar2(2000),c2 varchar2(2000),c3 varchar2(2000),c4 varchar2(2000),
c5 varchar2(2000),c6 clob);
insert into t1 select level,rpad('A',1900,'a'),rpad('B',1900,'B'),rpad('C',1900,'C'),rpad('D',1900,'D'),
rpad('E',1900,'E'),rpad('F',10000,'F') FROM  DUAL CONNECT BY LEVEL<=20000;
commit;
DBMS_STATS.GATHER_TABLE_STATS(USER,'T1',NULL,100);

insert into t2 select level,rpad('A',1900,'a'),rpad('B',1900,'B'),rpad('C',1900,'C'),rpad('D',1900,'D'),
rpad('E',1900,'E'),rpad('F',10000,'F') FROM  DUAL CONNECT BY LEVEL<=50000;
commit;
DBMS_STATS.GATHER_TABLE_STATS(USER,'T2',NULL,100);

为了便于报表统计,创建以下视图。

css 复制代码
CREATE or replace VIEW ALL_T AS SELECT * FROM T1 UNION ALL SELECT * FROM T2 union all select * from t1 union all select * from t2;

问题语句

css 复制代码
SELECT COUNT(1) FROM (select T.* from ALL_T T,ALL_T A WHERE T.ID=A.ID) AA

计划:

这里T.*,字节长度292,这里的select T.*是冗余的,直接查询select count(1)即可

3、改写

于是我们把select T.*去掉

css 复制代码
SELECT COUNT(1) FROM  ALL_T T,ALL_T A WHERE T.ID=A.ID

计划:

这里的字节长度为8,从原来的2.8s下降至0.191s

4、小结

好习惯的养成,要查询真实的列,避免select *消耗不必要的性能。

相关推荐
m0_49393453几秒前
如何在phpMyAdmin中导出包含虚拟生成列的表_GENERATED ALWAYS的处理
jvm·数据库·python
slandarer1 分钟前
MATLAB | R2026a 更新了哪些有趣的新东西?
开发语言·数据库·matlab
希望永不加班5 分钟前
SpringBoot 中 AOP 实现多数据源切换
java·数据库·spring boot·后端·spring
qq_206901395 分钟前
如何在 React 中正确使用 onClick 事件避免类型错误
jvm·数据库·python
2401_871696529 分钟前
如何防止SQL注入利用存储过程_确保存储过程不拼字符串
jvm·数据库·python
2301_7965885010 分钟前
如何在 macOS 中使用 launchd 每分钟执行一次 PHP 脚本
jvm·数据库·python
m0_7489203610 分钟前
HTML函数在笔记本上卡顿怎么办_笔记本运行HTML函数优化操作【操作】
jvm·数据库·python
2601_9498146914 分钟前
如何使用C#与SQL Server数据库进行交互
数据库·c#·交互
WJB-DavidWang14 分钟前
MongoDB-非关系型数据库-文档数据库(三) Kafka测试MongoDB性能
数据库·mongodb·nosql
m0_6784854517 分钟前
c++如何提取系统环境变量并直接保存到txt日志中_getenv与ofstream【实战】
jvm·数据库·python