Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQLite Database gives warning automatic index on <table_name>(column) After upgrading Android L

I have upgraded my Nexus 7 with Android 5.0 Lollipop, Before that my application going well with SQLite Database but now Whenever I execute any type of query, It gives me log cat error like:

12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.942: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id) 12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.960: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id) 12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on area(server_id) 12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on account(area_id) 12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on staff_visit(account_id) 12-09 12:37:04.978: E/SQLiteLog(13041): (284) automatic index on ordertab(account_id) 

So Is it Error of Any Lollipop Mistakes? I think so because i dont have updated my code before and after upgrading this OS.

like image 655
Pratik Butani Avatar asked Dec 09 '14 07:12

Pratik Butani


1 Answers

Automatic indexing was introduced in sqlite 3.7.17. A version of sqlite with this feature was only included in Android L developer preview. This is why you get the message only on Lollipop but not earlier. Even if it is logged as an error, it's really just a message.

Basically, the automatic indexing comes into play when you're doing lookups on non-indexed columns. sqlite assumes there's so much data that generating a temporary index is cheaper than raw lookup.

Consider adding explicit, permanent indices for your lookup columns with CREATE INDEX. For example, after your CREATE TABLE:

CREATE INDEX indexname ON tablename(columnname); 

where you can pick tablename(columnname) from the autoindex messages as produced by sqlite.

If you just want the old behavior back, you can disable auto-indexing with

PRAGMA automatic_index=off; 
like image 93
laalto Avatar answered Sep 20 '22 22:09

laalto