在日常的工作中,空值總是有特殊的身份,對於它的處理有時候也是比較糾結。
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...