在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Oracle与PostgreSQL的NULL和索引使用区别是什么

140次阅读
没有评论

共计 3961 个字符,预计需要花费 10 分钟才能阅读完成。

这篇文章主要讲解了“Oracle 与 PostgreSQL 的 NULL 和索引使用区别是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“Oracle 与 PostgreSQL 的 NULL 和索引使用区别是什么”吧!

Oracle 在创建索引时, 不会存储 NULL 值, 而 PostgreSQL 在创建索引时则会存储 NULL 值. 在查询时, 如使用 Column is null 这样的条件查询,Oracle 不会使用索引而 PostgreSQL 则会使用索引.

Oracle
插入数据,200w 多行的数据, 然后插入一行值为 null 的数据.

TEST-orcl@DESKTOP-V430TU3 create table tbl1(id int);
Table created.
TEST-orcl@DESKTOP-V430TU3 create global temporary table tmp(id int);
Table created.
TEST-orcl@DESKTOP-V430TU3 insert into tmp select rownum from dba_objects;
133456 rows created.
TEST-orcl@DESKTOP-V430TU3 insert into tmp select * from tmp;
133455 rows created.
TEST-orcl@DESKTOP-V430TU3 /
266910 rows created.
TEST-orcl@DESKTOP-V430TU3 /
533820 rows created.
TEST-orcl@DESKTOP-V430TU3 /
1067640 rows created.
TEST-orcl@DESKTOP-V430TU3 insert into tbl1 select * from tmp;
2135296 rows created.
TEST-orcl@DESKTOP-V430TU3 commit;
Commit complete.
TEST-orcl@DESKTOP-V430TU3 exec dbms_stats.gather_table_stats(TEST , TBL1 ,cascade= true);
PL/SQL procedure successfully completed.
TEST-orcl@DESKTOP-V430TU3 select index_name,index_type,blevel,leaf_blocks,num_rows,status,distinct_keys from user_indexes where table_name= TBL1 
INDEX_NAME INDEX_TYPE BLEVEL
------------------------------ --------------------------- ----------
LEAF_BLOCKS NUM_ROWS STATUS DISTINCT_KEYS
----------- ---------- -------- -------------
IDX_TBL1_ID NORMAL 2
 4662 2103843 VALID 134688
TEST-orcl@DESKTOP-V430TU3 insert into tbl1 values(null);
1 row created.
TEST-orcl@DESKTOP-V430TU3 commit;
Commit complete.
TEST-orcl@DESKTOP-V430TU3 
TEST-orcl@DESKTOP-V430TU3 exec dbms_stats.gather_table_stats(TEST , TBL1 ,cascade= true);
PL/SQL procedure successfully completed.
TEST-orcl@DESKTOP-V430TU3 select index_name,index_type,blevel,leaf_blocks,num_rows,status,distinct_keys from user_indexes where table_name= TBL1 
INDEX_NAME INDEX_TYPE BLEVEL
------------------------------ --------------------------- ----------
LEAF_BLOCKS NUM_ROWS STATUS DISTINCT_KEYS
----------- ---------- -------- -------------
IDX_TBL1_ID NORMAL 2
 4771 2152683 VALID 134688

执行查询

TEST-orcl@DESKTOP-V430TU3 set autotrace on explain
TEST-orcl@DESKTOP-V430TU3 select * from tbl1 where id is null;
 ID
----------
Execution Plan
----------------------------------------------------------
Plan hash value: 312383637
--------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | 5 | 898 (2)| 00:00:11 |
|* 1 | TABLE ACCESS FULL| TBL1 | 1 | 5 | 898 (2)| 00:00:11 |
--------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
 1 - filter(ID  IS NULL)
TEST-orcl@DESKTOP-V430TU3

PostgreSQL
数据表 tbl1 结构与 Oracle 一致.

testdb=# insert into tbl1 select generate_series(1,100000);
INSERT 0 100000
testdb=# explain (analyze,verbose) select * from tbl1 where id is null;
 QUERY PLAN 
--------------------------------------------------------------------------------------------------------
 Seq Scan on public.tbl1 (cost=0.00..1569.33 rows=11 width=4) (actual time=26.052..130.752 rows=1 loops=1)
 Output: id
 Filter: (tbl1.id IS NULL)
 Rows Removed by Filter: 110000
 Planning Time: 1.403 ms
 Execution Time: 130.814 ms
(6 rows)
testdb=# create index idx_tb1_id on tbl1(id);
CREATE INDEX
testdb=# explain (analyze,verbose) select * from tbl1 where id is null;
 QUERY PLAN 
--------------------------------------------------------------------------------------------------------
 Index Only Scan using idx_tb1_id on public.tbl1 (cost=0.42..8.56 rows=4 width=4) (actual time=0.133..0.136 rows=1 loops=1)
 Output: id
 Index Cond: (tbl1.id IS NULL)
 Heap Fetches: 1
 Planning Time: 1.512 ms
 Execution Time: 0.199 ms
(6 rows)

使用 id is null 进行查询, 使用的是 Index Only Scan.

感谢各位的阅读,以上就是“Oracle 与 PostgreSQL 的 NULL 和索引使用区别是什么”的内容了,经过本文的学习后,相信大家对 Oracle 与 PostgreSQL 的 NULL 和索引使用区别是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-07-24发表,共计3961字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 亚洲熟妇中文字幕五十中出 | 老头天天吃我奶躁我的动图 | 99精品久久 | 国产成人ae在线观看网站站 | 少妇无码av无码一区 | 日本xxx在线观看免费播放 | 超级碰碰青草久热国产 | 亚洲夂夂婷婷色拍ww47 | 亚洲国产精品久久日 | 一个色的综合 | 日韩一级精品视频在线观看 | 亚洲va久久久噜噜噜久久狠狠 | 国产v综合v亚洲欧美冫 | 巨熟乳波霸若妻在线播放 | 亚洲中文字幕一区精品自拍 | 欧美成人h版网址 | 国产亚洲一欧美一区二区三区 | 久久国内精品自在自线400部o | 亚洲国产综合自在线另类 | 亚洲经典激情春色另类 | 亚洲av无码成人精品区天堂 | 91成人免费视频 | 国产欧美日韩精品丝袜高跟鞋 | 亚洲三级在线免费观看 | 中文国产成人精品久久久 | 国产自精品在线 | 亚洲日本欧美综合在线一 | 亚洲精品一区二区四季 | 亚欧美| 成人三级在线播放 | 免费国产免费福利视频 | 久久综合九色综合97伊人麻豆 | 亚洲一区二区三区福利在线 | 久久久久毛片免费观看 | 精品国品一二三产品区别在线观看 | 亚洲免费国产 | 精品无码一区二区三区爱欲九九 | 在线欧美不卡 | 国产精品欧美亚洲韩国日本99 | 99久久免费精品国产免费 | 黄色片网站免费看 |