sql
查詢中,因為我們鍵盤輸入的總是字元型,遇到不同的資料型別,比較的時候,總是要把資料型別轉換一致,常用的思路有兩種(
oracle
為例):
新建表td_rewardworkf
,表結構如圖:
表資料百萬左右。
1,將原資料表的列
轉換成字元型別,然後和
具體條件比較,即:
to_char(oprtime,'yyyymm')>'201605'
2,原資料表的列
不變,將具體條件轉換成日期型別,即:
oprtime > to_date('201605','yyyy-mm-dd')
兩種sql
如下:1
,select t.partnerid,t.mobileno,to_char(t.oprtime,'yyyymm') month,t.bossyxplanid
from td_rewardworkf t where yxplanid='2015010101' and to_char(oprtime,'yyyymm')>'201604',2,
select t.partnerid,t.mobileno,to_char(t.oprtime,'yyyymm') month,t.bossyxplanid
from td_rewardworkf t where yxplanid='2015010101' and oprtime > to_date('201604','yyyymm')
第一種的計畫執行:
第二種的計畫執行:
可以看到,第二種明顯比第一種快很多。
回到sql
中,我們可以看到
第一種to_char(oprtime,'yyyymm')>'201604'
,是將每一行的資料的
oprtime
列to_char
,再和'201604'
比較,索引沒有起作用,需要搜尋全表,並且對每一行執行一次
to_char
,第二種,
oprtime > to_date('201604','yyyymm')
,sql
在執行之前,會先解析
sql語句,並且,如果在
oprtime
上有索引的話,這中情況下,索引會起作用,不用搜尋全表。當然,可以在
to_char(oprtime,'yyyymm')
上面建立索引,但一般不會這麼做。
sql優化 使用索引
專案中使用了大量的sql,對於查詢sql,如果沒有使用索引會對查詢速度造成很大的影響,例如如下sql select a.name,b.id from tablea a join tableb b on a.id b.other id where a.name test and b.pin 123 a...
SQL索引的使用
通過explain 檢視執行計畫,執行sql時是否使用索引 1.避免索引失效 1 全值匹配 對索引中所有列都指定具體值。該情況下,索引生效,執行效率高。2 最左字首法則 如果索引了多列,要遵守最左字首法則。指的是查詢從索引的最左前列開始,並且不跳過索引中的列。匹配最左字首法則,走索引 違背最左字首法...
如何合理使用SQL索引
1.合理使用索引 索引是資料庫中重要的資料結構,它的根本目的就是為了提高查詢效率。現在大多數的資料庫產品都採用ibm最先提出的isam索引結構。索引的使用要恰到好處,其使用原則如下 在經常進行連線,但是沒有指定為外來鍵的列上建立索引,而不經常連線的字段則由優化器自動生成索引。在頻繁進行排序或分組 即...