Hello ! Yes it is but I discover later some flaws on my assumptions look at further on this thread to see the end result.
Cheers ! > Sat Sep 05 2015 2:03:40 pm CEST CEST from "Luiz Am?rico" ><brandkarl at gmail.com> Subject: Re: [sqlite] First test of json and index >expressions, not so good > > Em 04/09/2015 17:09, "Domingo Alvarez Duarte" <sqlite-mail at dev.dadbiz.es> > escreveu: > > >>Hello ! >> >> This is my first test with json and index expressions ! >> >> How to make usage of the expression index on queries ? >> >> Why is json_extract so slow ? >> > Just for information > > Is json_extract from https://github.com/groner/sqlite-json ? > > Luiz > > > >>Cheers ! >> >> ________Output >> >> Time to insert 5000 0.032227 records by second = >> 155149 >> count= 4999 >> json= the_value_1 >> 0 0 0 SCAN TABLE json_tbl >> Time to select raw 5000 0.00244 records by second = >> 2.04918e+06 >> Time to select json_extrat no index 5000 8.12196 records by >> second = 615.615 >> Time to create index 5000 0.00605 records by second = >> 826446 >> 0 0 0 SCAN TABLE json_tbl >> Time to select json_extrat indexed 5000 7.38144 records by >> second = 677.375 >> >> ________ >> >> >> >> ________Program >> >> local max_count = 5000; >> local sql = "CREATE TABLE IF NOT EXISTS json_tbl(id integer primary key, > json > >>text collate nocase);"; >> >> local db = SQLite3(":memory:"); >> db.exec_dml(sql); >> >> local stmt = db.prepare("insert into json_tbl(json) values(?);"); >> >> local start = os.clock(); >> >> db.exec_dml("begin;"); >> for(local i=1; i < max_count; ++i) >> { >> stmt.bind(1, format([==[{"id" : %d, "value" : "the_value_%d"}]==], i, >> i)); >> stmt.step(); >> stmt.reset(); >> } >> stmt.finalize(); >> db.exec_dml("commit;"); >> >> local time_spent = os.clock() -start; >> print("Time to insert", max_count, time_spent, "records by second = ", >> max_count/time_spent); >> >> >> print("count=", db.exec_get_one("select count(*) from json_tbl")); >> print("json=", db.exec_get_one("select json_extract(json, '$.value') AS > val > >>from json_tbl where val = 'the_value_1';")); >> >> sql = "select json_extract(json, '$.value') AS val from json_tbl where >> val = ?;"; >> >> local showPlan = function() >> { >> stmt = db.prepare("explain query plan " + sql); >> while(stmt.next_row()) >> { >> local line = ""; >> for(local i=0, len = stmt.col_count(); i < len; ++i) >> { >> line += "\t" + stmt.col(i); >> } >> print(line); >> } >> stmt.finalize(); >> } >> >> showPlan(); >> >> start = os.clock(); >> stmt = db.prepare("select * from json_tbl"); >> while(stmt.next_row()) >> { >> } >> stmt.finalize(); >> >> time_spent = os.clock() -start; >> print("Time to select raw", max_count, time_spent, "records by second = ", >> max_count/time_spent); >> >> start = os.clock(); >> stmt = db.prepare(sql); >> for(local i=1; i < max_count; ++i) >> { >> stmt.bind(1, format("the_value_%d", i)); >> stmt.step(); >> //print(stmt.col(0)); >> stmt.reset(); >> } >> stmt.finalize(); >> >> time_spent = os.clock() -start; >> print("Time to select json_extrat no index", max_count, time_spent, > "records > >>by second = ", max_count/time_spent); >> >> start = os.clock(); >> db.exec_dml("create index json_tbl_idx on json_tbl(json_extract(json, >> '$.value'));"); >> time_spent = os.clock() -start; >> print("Time to create index", max_count, time_spent, "records by second = > ", > >>max_count/time_spent); >> >> showPlan(); >> >> start = os.clock(); >> stmt = db.prepare(sql); >> for(local i=1; i < max_count; ++i) >> { >> stmt.bind(1, format("the_value_%d", i)); >> stmt.step(); >> //print(stmt.col(0)); >> stmt.reset(); >> } >> stmt.finalize(); >> >> time_spent = os.clock() -start; >> print("Time to select json_extrat indexed", max_count, time_spent, > "records > >>by second = ", max_count/time_spent); >> >> db.close(); >> >> ________ >> _______________________________________________ >> sqlite-users mailing list >> sqlite-users at mailinglists.sqlite.org >> http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > _______________________________________________ > sqlite-users mailing list > sqlite-users at mailinglists.sqlite.org > http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users > > > ?