有時候你建立的索引並不管用

2021-06-22 02:51:13 字數 2117 閱讀 7638

在oracle裡面,oralce是不會把null放到普通索引裡的. 

create

table

person(id

number(38

)not

null

primary

key,

first_name

varchar2(50

)not

null,

last_name

varchar2(50

)not

null,

date_of_birth

date

null);

create

index

i_person_dob

onperson

(date_of_birth);

上述雖然建立了索引,但是在執行查詢單獨使用到該列時,就不會起到作用,例如:

select

1from

dual

where

date

'1980-01

-01'notin(

select

date_of_birth

from

person

);執行計畫如下:|id

|operation

|name|

------------------------------------- |

0|select

statement|

||*1|

filter|

||2|

fast

dual|

||*3|

table

access

full

|person|

-------------------------------------

查詢進行了乙個table access full操作,索引被忽略了。

最佳的解決方案,其實就是把這列設定成not null就好了:

alter

table

person

modify

date_of_birth

date

notnull

;

(也可以通過使用not exists來代替not in)

另外,以下查詢語句可以列出所有存在乙個null值的索引列。

select i

.table_name,

i.index_name,

listagg(

lpad(i

.column_position,2

)||':

'||rpad(i

.column_name,30

)||' '||

decode(t

.nullable

,'y','

(null)'

,'(not

null)'

),','

)within

group

(orderbyi

.column_position)

as"nullable columns in indexes"

from

user_ind_columnsi

join

user_tab_colst

on(t.

table_name,t

.column_name)=

((i.table_name,i

.column_name))

where

exists(

select

1from

user_tab_cols

twhere(t

.table_name,t

.column_name,t

.nullable)=

((i.table_name,i

.column_name

,'y'))

)groupbyi

.table_name,i

.index_name

orderbyi

.index_name

asc;

有時候成本並不是6秒

我想現在很多人都有了網路購物的經歷了,再也不像幾年前那麼擔驚受怕,那麼神秘而又深不可測,只敢窺探卻不敢越雷池半步。那一年第一次小試是在2006年,上購置一本雜誌,歷時乙個多月才完成一次驚險的交易。因為對電子商務的不信任,我們那時候甚至不敢在網路 輕信任何人和事,後來 的交易方式讓大家來通過 中介完成...

早安心語 微笑有時候說明你很堅強

1 她說,幸福就是找到了乙個令她想為他拼命 的人,而那人卻總是拍拍她的頭說,再吃一點,別餓著了。2 靜靜的走,默默的看,無論風雨,無論坎坷。3 不要等我流淚,你才明白我的悲傷。不要等我消失,你才知道我的存在。4 乙個人能有多大出息,關鍵看他怎樣對待自己的時間,你和時間的關係,就形成了你自己。你讓時間...

python有時候import不了當前的包

問題描述 importerror no module named x 但是,有些時候python直譯器可能腦抽。明明上述操作都有,但是就是找不到。importerror no module named x importerror no module named x importerror no mo...