兩個表,表a的內容是乙個列表,表b的內容是其明細。
a表,表名:head
b表,表名:detail
head表主鍵
字段 型
店鋪** varchar2(10)
番號1 number(2)
營業日 timestamp(6)
番號2 number(6)
detail表主鍵
字段 型
店鋪** varchar2(10)
番號1 number(2)
營業日 timestamp(6)
番號2 number(6)
行番號 number(5)
head表的資料量有上百萬條,detail表的資料量有上千萬條,
兩表關聯,sql如下:
select
--head表
h.aaa
--detail表
d.bbb
from
head h
inner join
detail d
on h.店鋪** = d.店鋪**
and h.番號1 = d.番號1
and h.營業日 = d.營業日
and h.番號2 = d.番號2
where
rownum < 100000
order by
h.營業日,
h.店鋪**,
h.番號1,
h.番號2,
d.行番號
因為如果不做rownum 小於10萬條的限制的話,結果會超過10萬條,不便於分析。
上述語句執行的很久,後來將關聯條件營業日做了如下調整,檢索速度就上來了,
and to_char(h.營業日, 'yyyymmdd') = to_char(d.營業日, 'yyyymmdd') --營業日
這麼做的理由是,營業日雖然是timestamp型,但是實際儲存的資料,是日期形式的,不包括時刻,即:
13-03-01 00:00:00.000000
所以,可以忽略時刻部分。
以下是完整的sql語句:
select
--head表
h.aaa
--detail表
d.bbb
from
head h
inner join
detail d
on h.店鋪** = d.店鋪**
and h.番號1 = d.番號1
and to_char(h.營業日, 'yyyymmdd') = to_char(d.營業日, 'yyyymmdd') --營業日
and h.番號2 = d.番號2
where
rownum < 100000
order by
h.營業日,
h.店鋪**,
h.番號1,
h.番號2,
d.行番號
以上是在開發過程中,碰到乙個問題,記錄下來,不知道大家是否碰到和我類似的問題。
順帶說一句,當rownum < = 1萬的時候,上面兩種方式的檢索時間沒多大差別。
mysql資料匯入遇到的timestamp型別問題
今天準備把最新的表匯入自己以前的機子上做臨時開發,在資料庫匯入的時候遇到乙個問題 incorrect table definition there can be only one timestamp column with current timestamp in default or on upd...
Oracle中date與timestamp的異同
在oracle中儲存date和時間資訊的話,實際上你有兩種字段資料型別的選擇 9i date資料型別 可以儲存月,年,日,世紀,時,分和秒。度量粒度是秒 以使用to char函式把date資料進行傳統地包裝,達到表示成多種格式的目的 select to char sysdate,mm dd yyyy...
oracle中date和timestamp的區別
如果你想在oracle中儲存date和時間資訊的話,實際上你由兩種字段資料型別的選擇的話,就讓我們看看這兩種資料型別的差別和它們提供了些什麼。date資料型別 這個資料型別我們實在是太熟悉了,當我們需要表示日期和時間的話都會想到date型別。它可以儲存月,年,日,世紀,時,分和秒。它典型地用來表示什...