show tables is slow/uncached
am 16.08.2009 08:09:25 von Laurence MeyerWe have a production database that has 4,000+ tables. For a variety of reasons, our CGIs always
have to run "show tables" to generate a list of all tables in the database.
This is by far our slowest query; it currently takes about 100 milliseconds. It is
apparently never cached; here's a relevant transcript:
mysql ...
use hg18
show tables
4421 rows in set (0.09 sec)
show tables
4421 rows in set (0.13 sec) <-- note about same speed (i.e. not cached)
I have seen this in versions 4.0.27-standard-log and 5.0.41-community
As an alternative, I tried the new SELECT ... FROM INFORMATION_SCHEMA.TABLES,
but it is much slower:
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'hg18';
4421 rows in set (1.73 sec)
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES where TABLE_SCHEMA = 'hg18';
4421 rows in set (1.67 sec) <-- second run; not cached and still very slow
Here's an unindexed query in a large table to show that caching is working for normal queries:
flush table gc5Base;
select count(*) from gc5Base;
562977 rows
select count(*) from gc5Base where sumSquares = 1684400;
1 row in set (0.38 sec)
select count(*) from gc5Base where sumSquares = 1684400;
1 row in set (0.00 sec)
This is an almost exclusively read-only database (there shouldn't be any locking issues).
All the tables are MyISAM.
Does anyone know why "show tables" is so slow?
Is there any way to speed this up?
We can create our own table with a cached copy of the results of "show tables",
but we would prefer to avoid that because it is kludgy.
thanks!
-larry
Larry Meyer larrym@soe.ucsc.edu
UCSC Genome Bioinformatics Group http://genome.ucsc.edu
--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe: http://lists.mysql.com/mysql?unsub=gcdmg-mysql-2@m.gmane.org