NULL 值與索引 二

2022-08-11 03:27:25 字數 994 閱讀 6727

在null值與索引(一)中講述了null值與索引的一些基本情況。其主要的內容為,基於允許存在null值的索引列,其索引值不會被儲存;其次

是由於這個特性導致了我們在使用is null時索引失效的情形;最後則是描述的通過為null值列新增not null約束來使得is null走索引。儘管我

們可以通過新增not null來解決is null走索引,當現實中的情況是仍然很多列根本是無法確定的,而必須保持其null特性。對於此種情形該如

何解決呢?

一、通過基於函式的索引來使得is null使用索引

二、使用偽列建立基於函式的索引來使得is null使用索引

三、null值與索引衍生特性

四、總結

1、對於用於連線或經常被謂詞使用到的列應盡可能避免null值屬性,因為它容易導致索引失效。

2、為需要使用null值的列新增預設值(alter table tb modify(col default 'y'))。

3、如果null值不可避免也不能使用預設值,應考慮為該常用列使用nvl函式建立索引,或使用偽列來建立索引以提高查詢效能。

4、對於復合索引應保證索引中至少有一列不為null值,還是因為全部列為null時不被索引儲存,以保證使用is null是可以使用索引。

5、對於復合索引應保證索引列應使用資料型別長度最小的列來新增not null約束應節省磁碟空間。

五、更多參考

null 值與索引(一)

sql tuning 步驟

高效sql語句必殺技

父游標、子游標及共享游標

繫結變數及其優缺點

dbms_xplan之display_cursor函式的使用

dbms_xplan之display函式的使用

執行計畫中各字段各模組描述

使用 explain plan 獲取sql語句執行計畫

啟用 autotrace 功能

函式使得索引列失效

oracle 繫結變數窺探

oracle 自適應共享游標

SQL優化 NULL值與索引的使用

null是資料庫中特有的資料型別,當一條記錄的某個列為null,則表示這個列的值是未知的 是不確定的。簡單的說,由於null存在著無數的可能,因此兩個null不是相等的關係,同樣也不能說兩個null就不相等,或者比較兩個null的大小,這些操作都沒有意義,得不到乙個確切的答案。那麼,乙個欄位有可能存...

異常與null值

從事程式設計師這個歷史就很神聖的職業有一段時間了。養成一種良好嚴肅的編碼習慣,不僅能避免程式中很多bug的產生。對今後的閱讀和維護也提供很多便利。重視異常丟擲和及時處理。以前我總是不喜歡處理異常,對可能出現的異常置之不理,隨它自生自滅。設定有時有意遮蔽掉異常,捕捉到異常卻不處理,也不將其丟擲。這樣雖...

唯一索引是否可以有多行NULL值?

在我的印象中,唯一索引保證非null行唯一,但可以有多行null值,今天正好用有個業務需要這樣,沒想到在插入第二個null值時失敗,提示重複值。我堅信我的想法是正確的,在網上查了些網頁,有說可以有多個null,有多只能有乙個null值,我只有自己實驗看看,分別在mssql2003和mssql2005...