91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Oracle與PostgreSQL的NULL和索引使用區別是什么

發布時間:2021-11-09 11:06:13 來源:億速云 閱讀:199 作者:iii 欄目:關系型數據庫

這篇文章主要講解了“Oracle與PostgreSQL的NULL和索引使用區別是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“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和索引使用區別是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

长子县| 芮城县| 西华县| 北票市| 普陀区| 新密市| 敖汉旗| 麻栗坡县| 福泉市| 健康| 周口市| 兰西县| 昂仁县| 嘉鱼县| 隆林| 蕲春县| 天津市| 嘉善县| 丰宁| 呼伦贝尔市| 饶平县| 龙胜| 新营市| 凌源市| 新干县| 界首市| 津市市| 建阳市| 高安市| 五常市| 读书| 四川省| 涪陵区| 衡阳县| 奉贤区| 锡林浩特市| 平山县| 平邑县| 迁西县| 内江市| 右玉县|