工作中遇到的sql優化中的and和or

2021-10-09 01:16:29 字數 1028 閱讀 7854

先來列舉兩個sql

select *

from am_base_info a, am_talent_info t

where a.id_num = t.id_num

and t.talent_level = '1'

and (t.highend_type = '1' or t.highend_type = '3' or

t.highend_type = '4')

or a.region_code in (110001)

通過oracle中的explain檢視執行計畫

通過執行計畫我們可以看到,是通過掃瞄兩個表然後使用笛卡爾積,最後再根據其他條件進行查詢合併,這就相當耗費時間了,這裡主要是在於最後乙個or,個人理解相當於查詢結果和and查詢的結果合併

那麼我們再來看另乙個查詢

這個結果和上面的對比一下就能看到  我們只查詢了次迴圈,結果就出來了,而沒有上面的笛卡爾積,為什麼呢?這是因為最後乙個and中,把or給拋棄掉了,就是說我們在上面的and的查詢結果集,判斷符合最後乙個and的結果,資料就可以出來了,而不需要再次掃瞄,合併結果集

工作中遇到的

今天,在工作中,發現乙個問題,簡要描述 用perl寫的cgi程式獲取表單元素的值,用獲得的值拼接sql語句,假如有個表單元素這樣寫 其中 type id 由perl寫成的同乙個cgi程式執行時寫入。另設乙個表單元素,供使用者輸入值使用 在cgi中獲得表單元素的值 my type id cgi par...

最近工作中遇到的SQL語句

1.求表中某列的和,並把其值賦給乙個變數 sqlcommand cmd new sqlcommand select sum aa from table conn int32 aa int32 cmd.executescalar 2.判斷欄位的值是否為數字 select from hr user wh...

記錄工作中遇到的sql問題

今天在工作中遇到了乙個需求 是這樣的 有兩張表 分別是 user info 用來存放使用者基本資訊 gift 存放使用者獲取的禮物 兩張表之間以user id進行關聯 當使用者每次領取禮物後 我們都會向gift表中插入一條記錄 現在 我需要查到 使用者名稱 使用者郵箱以及每個使用者共領取了幾次禮物 ...