问,select count(*) from t 能否优化?有人纳闷了,如此简单,还能有优化空间?是的,简单的背后不简单。
本文将通过 Oracle数据库的各种既有手段,展示count(*)从单车变火箭,踏上性能腾飞的梦幻之旅。然而,火箭并非尽头,因为创新永无止境,小小count也能蕴藏大智慧!接下来,国产原创数据库的创新大表演正式拉开序幕。

大饼: 彬老师,select count(*) from t 这种简单的SQL,还有优化空间吗?
彬老师: 先看看什么都不做的情况,测试如下:
DROP TABLE t PURGE;
CREATE TABLE t AS SELECT * FROM dba_objects;
ALTER TABLE T MODIFY OBJECT_NAME NOT NULL;
SELECT COUNT(*) FROM t;
SET AUTOTRACE TRACEONLY;
SET LINESIZE 1000;
SET TIMING ON;
SELECT COUNT(*) FROM T;
-- 执行计划
Plan hash value: 2966233522
-------------------------------------------------------------------
| Id | Operation | Name | Rows | Cost (%CPU) | Time |
| 0 | SELECT STATEMENT | | 1 | 292 (1)| 00:00:04 |
| 1 | SORT AGGREGATE | | 1 | | |
| 2 | TABLE ACCESS FULL| T | 92256 | 292 (1)| 00:00:04 |
--------------------------------------------------------------------
-- 统计信息
0 recursive calls
0 db block gets
1048 consistent gets小渣: 执行计划走的是全表扫描,逻辑读高达1048,看起来性能的确很拉垮。

未完待续... 国产数据库创新集锦——小count也有大智慧⓶普通索引,单车变摩托
公众号:收获不止数据库
微信:ljbyxl1213
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/9091385/viewspace-3080007/ ,如需转载,请注明出处,否则将追究法律责任。