2012-10-09 26 views
11

Có một vài câu hỏi liên quan đến chủ đề này trên stackoverflow, nhưng tôi đã không nhận được câu trả lời đúng. Tôi có một số nghi ngờ về hiệu suất của các tập tin phẳng, nó là tốt hơn để sử dụng các tập tin phẳng thay vì SQLite?Cách cải thiện hiệu suất cho cơ sở dữ liệu SQLite cho android

Tôi đã thống kê hiệu suất cho Android SQLite.

Tôi có thống kê hiệu suất cho một bảng có 21 cột

Ai cũng có thể đề nghị cách giảm thời gian chèn này.

Records Write time in ms Read time in ms 
1000  67813     608 
1000  66340     604 
1000  64359     609 
10000  679837     5159 
10000  618062     5110 
10000  644638     5729 
10000  646878     5890 

Flat file có ít thời gian hơn là SQLite

Vì vậy, bất cứ ai tôi xin đề nghị làm thế nào tôi có thể cải thiện thời gian này cho SQLite.

Tôi đang sử dụng đơn giản database open insert using ContentValues và đóng cơ sở dữ liệu.

Vui lòng đề xuất cho tôi một số điều về cách cải thiện các thống kê này.

Số liệu thống kê hiệu suất được cập nhật sau khi sử dụng câu trả lời dưới đây.Tuy nhiên tôi muốn tăng hiệu suất này.

Records Writetime in ms   Readtime in ms 
1000  1645      530   
1000  2497      672   
1000  3143      610   
10000  16356      5243   
10000  14006      5122   
10000  13158      5002   
10000  14828      5234   
100000  125525     77622 

Cảm ơn

+1

Bạn nên đăng mã chèn của bạn nếu bạn muốn tối ưu hóa thời gian chèn. – keyser

+0

Tệp phẳng và SQLite có mục tiêu khác nhau, một là lưu trữ với truy xuất hàng loạt, SQLite là để truy xuất nhanh (nhanh hơn tệp văn bản trong hầu hết các trường hợp) – dvhh

+0

sử dụng các giao dịch để chèn lớn – njzk2

Trả lời

15

Tôi tin rằng bạn đang chèn 1000 hoặc 10000 sử dụng một vòng lặp. Sử dụng GIAO DỊCH, nó sẽ làm giảm đáng kể thời gian ghi. Tôi đã gặp phải một vấn đề như vậy và nó giảm thời gian viết trong trường hợp của tôi từ khoảng 30 giây xuống còn chưa tới 1 giây.

Hãy xem this.

Về cơ bản, những gì bạn cần làm là:

db.beginTransaction(); 
try{ 
    for(int i = 0 ; i < LENGTH ; i++) { 
     // execute SQL 
    } 
    db.setTransactionSuccessful(); // marks a commit 
    } 
finally{ 
    db.endTransaction(); 
} 
+0

Ohh thực sự cảm ơn rất nhiều Hãy để tôi thử –

+0

Tôi phải sử dụng truy vấn chèn ở đây? –

+0

Ở đây tôi không cần phải mở cơ sở dữ liệu và đóng databse trong mã của tôi? –

Các vấn đề liên quan