顯示具有 sqlite 標籤的文章。 顯示所有文章
顯示具有 sqlite 標籤的文章。 顯示所有文章

2011年1月14日 星期五

[sqlite]型態轉換 cast

為了省麻煩,我把所有的欄位都用文字來存。連日期也是。

例如 990101 是民國99年1月1日,1000111 是民國100年1月1日。

原本,排序還不是問題,就到了民國99年跟民國100年產生了問題。

990101是排在1000101的後面。

面對這樣的不調適,原先的做法是全抓回來,自己再排一次。

可是要抓某一範圍內的如 date < 1000101 and date > 991225 還是很麻煩。

後來發現一個方法叫做 cast

讓以下的句子可以如預期的工作。

select * from table order by cast (date as integer)

把 date 字串換成整數,比大小就準了。

2010年12月17日 星期五

[sqlite] index 加快了查詢速度

原本我的表格裡,只有單純的幾個欄位,沒有任何欄位有設定 key 屬性,
也都沒有設定流水號的欄位。

要檢查資料是否有重覆的時候,我就得自己準備了一個 sql 字串來檢查,
到了資料有 22 萬筆的時候,大約查一次要 0.2 秒。
insert 或 update 一次只要 0.001 ~ 0.0017,看硬碟忙不忙。
如果有 14 萬筆資料,就要花 7 個小時在檢查資料重覆性。
塞一年的股票資料就很花工夫了。

後來查到網路上說,資料庫的 index 若有建立,可以省下很多時間,
當下試試看。

語法是:

create unique index if not exist <indexname> on <tablename> ( <keycolumn>, )

做完之後,馬上查詢的時間一次只要 0.001 秒,甚至有時少於 1 毫秒。

真省時間!

玩 database 還真麻煩。
這種事感覺是很基本資料庫優化的工作,應該要預設開啟的?
或是因為我沒有設 key column 引擎也不知道要怎麼幫吧。

這次以後就要對於 table schema 及 index 特別注意了。

ref:
http://www.sqlite.org/lang_createindex.html