From 8aead812baaacb962c15d0ab27bdaf4c388b7d59 Mon Sep 17 00:00:00 2001 From: tsukasaoishi Date: Thu, 7 Aug 2014 22:41:23 +0900 Subject: Tables existence check query is executed in large quantities When Rails starts, tables existence check query is executed number of models. In case of mysql, SHOW TABLES LIKE 'table1'; SHOW TABLES LIKE 'table2'; SHOW TABLES LIKE 'table3'; ... SHOW TABLES LIKE 'table999'; Add process to get the names of all tables by one query. --- activerecord/lib/active_record/connection_adapters/schema_cache.rb | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/connection_adapters/schema_cache.rb b/activerecord/lib/active_record/connection_adapters/schema_cache.rb index 3116bed596..726810535d 100644 --- a/activerecord/lib/active_record/connection_adapters/schema_cache.rb +++ b/activerecord/lib/active_record/connection_adapters/schema_cache.rb @@ -19,6 +19,7 @@ module ActiveRecord # A cached lookup for table existence. def table_exists?(name) + prepare_tables if @tables.blank? return @tables[name] if @tables.key? name @tables[name] = connection.table_exists?(name) @@ -82,6 +83,12 @@ module ActiveRecord def marshal_load(array) @version, @columns, @columns_hash, @primary_keys, @tables = array end + + private + + def prepare_tables + connection.tables.each { |table| @tables[table] = true } + end end end end -- cgit v1.2.3 From 4e83815ce991efce2b84aa570f6673227ff0bb0d Mon Sep 17 00:00:00 2001 From: tsukasaoishi Date: Fri, 8 Aug 2014 01:03:09 +0900 Subject: change to empty? from blank? --- activerecord/lib/active_record/connection_adapters/schema_cache.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/connection_adapters/schema_cache.rb b/activerecord/lib/active_record/connection_adapters/schema_cache.rb index 726810535d..a10ce330c7 100644 --- a/activerecord/lib/active_record/connection_adapters/schema_cache.rb +++ b/activerecord/lib/active_record/connection_adapters/schema_cache.rb @@ -19,7 +19,7 @@ module ActiveRecord # A cached lookup for table existence. def table_exists?(name) - prepare_tables if @tables.blank? + prepare_tables if @tables.empty? return @tables[name] if @tables.key? name @tables[name] = connection.table_exists?(name) -- cgit v1.2.3