On Thu, Aug 7, 2014 at 2:50 PM, Simon Slavin <slav...@bigfraud.org> wrote: > > > On 7 Aug 2014, at 10:56am, Giuseppe Costanzi <giuseppecosta...@gmail.com> > wrote: > > > Hi to everybody, > > I have the following problem, on a database, 20M on a server linux, when I > > make ANALYZE all the interrogations become slow. > > I'm very sorry, but I'm having a little trouble with your English and want to > be sure I understand your report. > > While you are running ANALYZE, you can expect the system to run slowly. > ANALYZE does lots of work. After you have finished running ANALYZE, the > system should not be slower than it was before you started running ANALYZE. > > If you have finished running ANALYZE and SQLite commands are taking longer > than they did before, please tell us which version of SQLite you're running. > > If you are executing commands in your own application can you please download > the SQLite shell tool and try the same commands in that ? You can use the > following command > > .timer ON > > to make the shell tool show you timing for each command it runs. > > You should be able to reverse the results of ANALYZE using the following > commands: > > DROP TABLE sqlite_stat1; > DROP TABLE sqlite_stat2; > DROP TABLE sqlite_stat3; > DROP TABLE sqlite_stat4; > > (Some of these will give errors because different versions of SQLite create > different tables.) If you do this, and run your queries again, do they run > faster like they ran before you did ANALYZE ? > > Simon. > _______________________________________________ > sqlite-users mailing list > sqlite-users@sqlite.org > http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
ok I will try to explain better I have finished running ANALYZE and SQLite commands are taking longer only when I use python db api such as def read(self, fetch, sql, args=()): try: cur = self.con.cursor() cur.execute(sql,args) if fetch == True: rs = cur.fetchall() else: rs = cur.fetchone() cur.close() return rs except Exception, e: self.handle_exception(e) however I have done what you have pointed out me and in effects the speed of execution from the shell is best after having performed ANALYZE as I would be me expected V:\>sqlite3 lab.db SQLite version 3.7.17 2013-05-20 00:56:22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .timer ON sqlite> .schema package_unloaded CREATE VIEW package_unloaded AS SELECT dict_products.dict_product_id, products.product, products.code, SUM(CASE WHEN events.category_id = 0 THEN 1 ELSE 0 END) AS download, SUM(CASE WHEN packages.available = 1 THEN 1 ELSE 0 END) AS stock, dict_products.department_id AS department_id, strftime('%Y-%m-%d', events.log_time) AS log_time FROM dict_products INNER JOIN products ON (dict_products.product_id = products.product_id) LEFT JOIN batchs ON (dict_products.dict_product_id = batchs.dict_product_id) LEFT JOIN packages ON (batchs.batch_id = packages.batch_id) LEFT JOIN events ON (packages.package_id = events.package_id) WHERE events.enable =1 GROUP BY dict_products.dict_product_id ORDER BY products.code; sqlite> SELECT code,product,download,stock FROM package_unloaded WHERE department_id = 1 AND downl oad >0 AND log_time ...> BETWEEN '2014-04-01' AND '2014-06-30' ORDER BY code; some rows as.... 15439|VB12 Diluente|5|2 15440|FOL DTT Releasing Agent|6|1 15443|CKMB DIL|3|1 CPU Time: user 0.375000 sys 0.203125 sqlite> sqlite> ANALYZE; CPU Time: user 0.203125 sys 0.140625 sqlite> sqlite> SELECT code,product,download,stock FROM package_unloaded WHERE department_id = 1 AND downl oad >0 AND log_time ...> BETWEEN '2014-04-01' AND '2014-06-30' ORDER BY code; some rows as.... 15439|VB12 Diluente|5|2 15440|FOL DTT Releasing Agent|6|1 15443|CKMB DIL|3|1 CPU Time: user 0.250000 sys 0.000000 sqlite> I have also noticed that, using python db api2 if I perform a query recalling a view on the database this it is slower if I directly write the query in the script of python For example if I perform SELECT * FROM package_dowloaded WHERE department_id = ? ORDER BY code; the execution is slower if I perform SELECT dict_products.dict_product_id, products.product, products.code, SUM(CASE WHEN events.category_id = 0 THEN 1 ELSE 0 END) AS download, SUM(CASE WHEN packages.available = 1 THEN 1 ELSE 0 END) AS stock, dict_products.department_id AS department_id, strftime('%Y-%m-%d', events.log_time) AS log_time FROM dict_products INNER JOIN products ON (dict_products.product_id = products.product_id) LEFT JOIN batchs ON (dict_products.dict_product_id = batchs.dict_product_id) LEFT JOIN packages ON (batchs.batch_id = packages.batch_id) LEFT JOIN events ON (packages.package_id = events.package_id) WHERE department_id = ? AND events.enable =1 GROUP BY dict_products.dict_product_id ORDER BY products.code and this independently from ANALTYZE but after run ANALYZER the situation worsens regards beppe _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users