第三掌 增加查詢的範圍限制
增加查詢的範圍限制,避免全範圍的搜尋。
例3:以下查詢表record 中時間actiontime小於2023年3月1日的資料:
select * from record where actiontime < to_date ('20010301' ,'yyyymm')
查詢計畫表明,上面的查詢對錶進行全表掃瞄,如果我們知道表中的最早的資料為2023年1月1日,那麼,可以增加乙個最小時間,使查詢在乙個完整的範圍之內。修改如下: select * from record where
actiontime < to_date ('20010301' ,'yyyymm')
and actiontime > to_date ('20010101' ,'yyyymm')
後一種sql語句將利用上actiontime欄位上的索引,從而提高查詢效率。把'20010301'換成乙個變數,根據取值的機率,可以有一半以上的機會提高效率。同理,對於大於某個值的查詢,如果知道當前可能的最大值,也可以在where子句中加上 「and 列名< max(最大值)」。
提高sql質量,增加查詢速度
應盡量避免在 where 子句中使用 或 操作符,否則將引擎放棄使用索引而進行全表掃瞄。對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 ...
SQL的查詢優化
從表連線的角度優化 內連線 外連線 交叉連線 使用儲存過程取代暫時寫sql語句 從索引角度優化 對經常使用的查詢字段建立索引。這樣查詢時只進行索引掃瞄,不讀取資料塊。1.避免在where子語句中對字段進行null判斷 建立資料庫是限定not null,用 ult賦預設值 2.避免在where子語句中...
SQL查詢範圍重疊的資料
常常碰到要校驗資料範圍是否存在重疊衝突的情況,典型的場景是房間預訂。假如房間a已經有9月1日 9月10日的預訂記錄,當其它客人再來預訂時,系統必須判斷,不能與這個日期範圍產生重疊。有四種情況會產生重疊 1 全包含 例如使用者企圖預訂8月30日 9月15日 2 被包含 例如使用者企圖預訂9月5日 9月...