select count(1) from internet_act t 這個sql查下來居然不會使用internet_act_indx_1
select statement, goal = choose cost=7796 cardinality=6619756 bytes=40870373544
table access full object owner=ucloodev object name=internet_act cost=7796 cardinality=6619756 bytes=40870373544
除非後面使用where *** < ***
查原因發現如下
由於b*tree索引不儲存null值,所以在索引字段允許為空的情況下,某些oracle查詢不會使用索引.
很多時候,我們看似可以使用全索引掃瞄(full index scan)的情況,可能oracle就會因為null值的存在而放棄索引.
在此情況下即使使用hints,oracle也不會使用索引,其根本原因就是因為null值的存在.
當索引字段允許為null時,oracle放棄此索引
當該字段為not null時,索引可以被強制使用
以下為網上查來的資料
posted by: eygle
at february 23, 2006 09:48 am
ref:"由於b*tree索引不儲存null值,所以在索引字段允許為空的情況下,oracle查詢不會使用索引."
這種情況只影響強制使用索引hints而又無此字段的where條件時,當select語句中的where條件包含此字段的expression時一樣可以使用此索引!
反之,按本文的說法,我們豈不是只能在非空字段上建索引了?!事實是我們可以在我們任意想要建索引的字段上建索引,只要你認為必要,無需關注其是否not null!
不同的是,is null條件是當然是不查b*tree索引的,bitmap索引則可以。
posted by: xsb
at february 28, 2006 10:28 am
ref:"由於b*tree索引不儲存null值,所以在索引字段允許為空的情況下,oracle查詢不會使用索引."
這種情況只影響強制使用索引hints而又無此字段的where條件時,當select語句中的where條件包含此字段的expression時一樣可以使用此索引!
反之,按本文的說法,我們豈不是只能在非空字段上建索引了?!事實是我們可以在我們任意想要建索引的字段上建索引,只要你認為必要,無需關注其是否not null!
不同的是,is null條件當然是不查b*tree索引的,bitmap索引則可以。
關於BIEE不能正常啟動
網路連線不上 1.lsnrctl不能正常啟動 1.那些需要修改 etc hosts 和 etc sysconfig network 修改當前ip位址的hostname 並且保持和etc sysconfig network一致 需要重啟重新整理hostname 當然也可以用命令 2.修改oracle ...
CentOs yum不能正常使用的問題
執行yum y install 報錯error cannot retrieve metalink for repository epel.please verify its path and try again 1,修改 etc yum.repos.d epel.repo注釋metalink映象恢復...
使用crontab不能正常執行的問題
crontab l 列出當前使用者的crontab列表 crontab e 以vi開啟crontab檔案,可以進行編輯。如果需要加新的自啟動專案,可以在此進行新增後再輸入 wq 儲存。crontab.xgoo5mx 25l,1611c written crontab installing new c...