關於索引和空值的討論 r3筆記第80天

2021-09-28 13:16:44 字數 1007 閱讀 3857

在日常的工作中,空值總是有特殊的身份,對於它的處理有時候也是比較糾結。

sql> create table index_test(id number not null,name varchar2(30) ) ;

exec dbms_stats.gather_table_stats(user,'index_test');

sql> select *from index_test where id is not null; index full scan | inx_test | 3 | 12 | 1 (0)| 00:00:01 |

對於這個查詢可能沒什麼感覺,走了全索引掃瞄。我們在查詢條件中新增了id is not null的條件,其實id列已經存在非空約束了。所以這個過濾條件可有可無。index full scan | inx_test | 3 | 12 | 1 (0)| 00:00:01 |

這個時候我們來取消id列的非空約束。

sql> select *from index_test;

sql> select *from index_test where id is not null;

execution plan

predicate information (identified by operation id):

1 - filter("id" is not null)

好了問題來了,索引對於空值好像總是有些特殊,我們來看看空值在索引中的一些細節。

sql> set autot off

sql> insert into index_test values(null,1);

sql> select id,name,count(*)from index_test group by id,name ;

就如下面的情況,我們已經存在唯一性索引,但是因為b樹索引不會儲存null的條目,所以對錶中已有的空值就需要使用全表掃瞄了。

我們如果需要輸出非空的資料,加入is not null的過濾條件,索引就能夠正常啟用了。

和Null有關的函式 r3筆記第48天

關於null相關的函式在日常的工作中還有比較實用的,可能會碰到各種和null校驗相關的情況,大體有以下幾種。case when sql select case when 1 1 then 2 end from dual 如果1 1滿足,就返回2,否則返回null casewhen 1 1 then1...

MySQL資料型別 r3筆記第87天

今天在本地裝了乙個mysql的學習環境,簡單的熟悉了一下。準備開始好好學習mysql了。數值型別 型別大小範圍 有符號 範圍 無符號 用途 tinyint 1 位元組 128,127 0,255 小整數值 smallint 2 位元組 32 768,32 767 0,65 535 大整數值 medi...

shell基礎學習總結 一 r3筆記第63天

關於shell也多多少少的寫了不少文章了。在工作中shell的使用也是相當的普遍了,尤其是基礎的學習。今天就簡單的總結一下,希望對大家有所幫助。檢視區域性 全域性環境變數91611 0 nov22 00 00 05 ora smon test01 cat proc 9161 environ tr 0...