在我的SQLite Adapter
類中,對於Android應用程序,我有以下方法。密鑰KEY_WAS
可以是0或1.該方法在數據庫中搜索給定的name
和給定的date
(對於給定的日期,DB中的特定名稱只能有一個唯一條目)。所以,如果這樣的條目存在,我們進入if
,否則was
保持爲零。最後,返回was
。某些語句執行所需時間不恆定
public int wasHere(String name, String date) throws SQLException {
Log.d("wasHere", "begins, date = " + date);
Cursor c = ourDatabase.query(DATABASE_TABLE, ALL_KEYS, KEY_NAME
+ "=" + "'" + name + "'" + " AND " + KEY_DATE + "=" + "'"
+ date + "'", null, null, null, null);
Log.d("wasHere", "below Cursor");
int was = 0;
if(c.moveToFirst()) {
Log.d("wasHere", "inside IF");
was = c.getInt(c.getColumnIndex(KEY_WAS));
}
Lod.d("wasHere", "ends");
return was;
}
從日誌條目,我粘貼一些特定的人(你可以忽略時間的「開始」和「目的」爲取決於被調用wasHere
環路):
07-18 07:08:03.398: D/dbwas(29568): begins, date = 08 Aug 2013
07-18 07:08:03.398: D/dbwas(29568): below cursor
07-18 07:08:03.398: D/dbwas(29568): ends
07-18 07:08:03.398: D/dbwas(29568): begins, date = 09 Aug 2013
07-18 07:08:03.406: D/dbwas(29568): below cursor
07-18 07:08:03.406: D/dbwas(29568): ends
07-18 07:08:03.359: D/dbwas(29568): begins, date = 02 Aug 2013
07-18 07:08:03.359: D/dbwas(29568): below cursor
07-18 07:08:03.367: D/dbwas(29568): inside IF
07-18 07:08:03.367: D/dbwas(29568): ends
07-18 07:08:03.367: D/dbwas(29568): begins, date = 03 Aug 2013
07-18 07:08:03.367: D/dbwas(29568): below cursor
07-18 07:08:03.375: D/dbwas(29568): inside IF
07-18 07:08:03.375: D/dbwas(29568): ends
07-18 07:08:03.430: D/dbwas(29568): begins, date = 14 Aug 2013
07-18 07:08:03.430: D/dbwas(29568): below cursor
07-18 07:08:03.430: D/dbwas(29568): inside IF
07-18 07:08:03.430: D/dbwas(29568): ends
我的問題是關於「開始」和「結束」的日誌時間。如上所示,在五個日誌條目中,兩個(8月8日和8月14日)從「開始,日期= ...」到「結束」需要0個時間。
9 8月在執行Cursor
語句時需要8 ms(.008秒)。
8月2日和8月3日取8毫秒(0.008秒)在執行if
語句。
14 8月沒有時間執行上述兩個語句中的任何一個。
同樣,在「日誌」中有很多這樣的差異。對於不同的日期,Cursor
和if
語句隨機取8毫秒(是的,時間總是8毫秒)。
現在,我正在執行「wasHere」方法數百次,因此數百個8毫秒花費我太多時間。爲什麼上述差異是隨機發生的。有沒有什麼方法可以將其刪除(或者是我正在做的其他方式)。 [8月8日和8月14日聲明需要零時間,因爲他們應該。]
我現在明白了。謝謝! –
@BornAgain爲了回答你沒有問的問題:'CREATE INDEX blabla ON MyTable(date,name)' –