1. 程式人生 > >ORACLE查詢優化之is null和is not null優化

ORACLE查詢優化之is null和is not null優化

  最近工作的時候遇到了比較大的資料查詢,自己的sql在資料量小的時候沒問題,在資料量達到300W的時候特別慢,只有自己優化sql了,以前沒有優化過,所以記錄下來自己的優化過程,本次是關於is null和is not null的優化。所用環境0racle11g

  現有a表,a表中有欄位b,我想查出a表中的b欄位is null的資料。

select * from a where b is null

  我在b欄位上建立的索引,但是當條件是is null 和is not null時,執行計劃並不會走索引而是全表掃描。此時a表中的資料有310w條記錄,執行這段查詢花費時間約為0.526秒

  優化:

  1. 通過函式索引:通過nvl(b,c)將為空的欄位轉為不為空的c值,這裡要確保資料中是不會出現c值的。再在函式nvl(b,c)上建立函式索引
    select
    * from a where nvl(b,c)=c

    此時花費時間約為 0.01秒。  

  當條件為is not null 時同理可以用 nvl(b,c)<>c來代替

相關推薦

ORACLE查詢優化is nullis not null優化

  最近工作的時候遇到了比較大的資料查詢,自己的sql在資料量小的時候沒問題,在資料量達到300W的時候特別慢,只有自己優化sql了,以前沒有優化過,所以記錄下來自己的優化過程,本次是關於is null和is not null的優化。所用環境0racle11g   現有a表

oracle is null is not null

當字串為空時,在where 使用 is null來判斷。 例如: create table test (    stuno number(10) primary key,    stuname varchar2(50) ) insert into test(stuno

mysql 裏面的isnull()ifnull() is null is not null

zhang pos clas orm 字段 div isnull form article usergrade表 1.找到裏面username是null的行 SELECT * FROM usergrade WHERE ISNULL(USERNAME) SELECT

轉!!mysql 欄位 is not null 欄位 !=null

  今天在查詢資料時,查到包含一條某個時間startTime(該欄位預設為null ) 為null的記錄,想把它過濾,加了 startTime != null 的條件,結果記錄都沒了,應該用條件 is not null。    

mysql 裡面的isnull()ifnull() is null is not null

usergrade表 2.找到裡面username是null的行 SELECT * FROM usergrade WHERE ISNULL(USERNAME) SELECT * FROM usergrade  WHERE USERNAME IS NULL 3.找到

mysql 欄位 is not null 欄位 !=null

今天工資中遇到問題 判斷一個欄位不為空的值 我用 欄位 !=null 沒有報錯也沒有資料,我以為真是這樣,到後來業務出錯才發現!!!首先:注意了  null  不能用 '!=','=','<>' 來判斷 雖然不會報錯,但資料不正確。應該用,is not null

hive中使用is nullis not null問題

   在使用HQL時如果有空值喜歡追隨SQL99的規範使用IS NULL 和IS NOT NULL來判斷,這個是一般的思維習慣。但是在hive中跟傳統的資料庫不一樣的地方在於NULL的解讀。 在傳統資料庫中欄位沒有值或者為空即表示為NULL,但是在hive中預設的NULL值

SQLPL/SQL的效能優化六---使用調優PL/SQL

1、PL/SQL的效能優勢   A、過程化的方法:SQL是非過程化語言,而PL/SQL是過程化語言,可操作優化器讀取等;   B、減少網路開銷:在客戶端-伺服器環境中,減少網路傳輸可以顯著地提高效能;   C、分解並攻克海量SQL語句:SQL語句越很雜越難以優化,可以用PL

js前端效能優化函式節流函式防抖

前言:針對一些會頻繁觸發的事件如scroll、resize,如果正常繫結事件處理函式的話,有可能在很短的時間內多次連續觸發事件,十分影響效能 節流: 節流:使得一定時間內只觸發一次函式。 它和防抖動最大的區別就是,節流函式不管事件觸發有多頻繁,都會保證在規定時間內一定會執行一次真正的事件處理函式

Linux效能優化定期清理保留 history 記錄

有經驗的 Linux 系統工程師都喜歡把 Bash 的 HISTSIZE/HISTFILESIZE 設定的很大,這樣可以記錄更多的歷史命令以便以後查閱,這是個好習慣,但有個小問題就是 history 記錄了的大量資訊在系統啟動後就被 load 到記憶體裡,並且一直儲存在記憶體裡,這樣浪費了不少記憶體

Oracle開發專題:%TYPE %ROWTYPE

1. 使用%TYPE 在許多情況下,PL/SQL變數可以用來儲存在資料庫表中的資料。在這種情況下,變數應該擁有與表列相同的型別。例如,students表的first_name列的型別為VARCHAR2(20),我們可以按照下述方式宣告一個變數: DECLARE    

Android進階——效能優化記憶體洩漏記憶體抖動的檢測及優化措施總結(七)

上一篇Android進階——效能優化之記憶體管理機制和垃圾回收機制(六)簡述了Java記憶體管理模型、記憶體分配、記憶體回收的機制

深入理解編譯優化迴圈展開粗化鎖

[toc] # 簡介 之前在講JIT的時候,有提到在編譯過程中的兩種優化迴圈展開和粗化鎖,今天我們和小師妹一起從Assembly的角度來驗證一下這兩種編譯優化方法,快來看看吧。 # 迴圈展開和粗化鎖 小師妹:F師兄,上次你講到在JIT編譯的過程中會進行一些編譯上面的優化,其中就有迴圈展開和粗化鎖。我對

效能優化二:結構體型別的效能優化

C#裡結構體是值型別,其區域性變數的空間分配在棧上。很多同學喜歡用它,是因為它的儲存密度高、分配和回收成本非常低。 但是前幾天在查熱點的時候,卻碰到結構體的效能非常慢,甚至遠低於把同樣資料結構做成的引用型別。下文對這個問題做了些簡化,方便大家理解。 程式碼分析 優化前的原始碼示例: //結構體宣告

null調整為not null default xxx,不得不注意的坑

最近碰到一個case,值得分享一下。   現象 一個DDL,將列的屬性從null調整為not null default xxx, alter table slowtech.t1 modify name varchar(10) not null default 'slowtech'; 通過平臺執行

oracle優化:IS NULL優化IS NOT NULL優化

IS NULL的優化 優化方法: 通過nvl(欄位i,j),將欄位i中為空的資料轉化為j,從而正常使用索引. 具體則是將條件 i is null 轉化為 j = nvl(i,j); 資料量較大時轉化is null 在所用oracle版本提升明顯, 注意:使用時必須確保欄位i的資料不包含j

MySQL查詢優化IS NULL優化

原文地址:https://dev.mysql.com/doc/refman/5.7/en/is-null-optimization.html 譯文: 8.2.1.13 IS NULL 優化 MySQL可以對col_name IS NULL執行與col_name = consta

ES優化聚合查詢深度優先廣度優先

策略 字段 示例 pre collect 功率 模式 二層 信息 1.優化聚合查詢示例 假設我們現在有一些關於電影的數據集,每條數據裏面會有一個數組類型的字段存儲表演該電影的所有演員的名字。 { "actors" : [ "Fred Jones"

mysql8基礎 select...where...is not null 查詢不為NULL的內容

資料,資料,命根就在資料 ! 操作資料庫時,一定要謹慎小心。師萬物 這裡的程式碼看看就好,要有自己的判斷。遇到抉擇,要不恥上下問。 example stu@Ubuntu:~$ mysql -u root -p Enter password: Welc

Python學習 a == b a is b 的區別

Python學習中經常會遇到 a == b 和 a is b 的問題, 也許你會為此迷惑。下面,我們來簡單分析一下: 首先我們要了解對於Python物件而言,一般存在三個屬性:type 型別, value 值 以及 地址id 1 a == b , 這是一個比