From 8297f8a31e88468106b013219104df17659ab718 Mon Sep 17 00:00:00 2001 From: Ryuta Kamizono Date: Tue, 15 Oct 2019 08:44:16 +0900 Subject: [PATCH] Merge pull request #37465 from alpaca-tc/optimize_primary_keys Fixed performance regression introduced MySQL 8.0 --- activerecord/CHANGELOG.md | 4 ++++ .../connection_adapters/abstract_mysql_adapter.rb | 6 +++--- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/activerecord/CHANGELOG.md b/activerecord/CHANGELOG.md index a8d5fd1427..c508fc65fd 100644 --- a/activerecord/CHANGELOG.md +++ b/activerecord/CHANGELOG.md @@ -1,3 +1,7 @@ +* Fixed the performance regression for `primary_keys` introduced MySQL 8.0. + + *Hiroyuki Ishii* + * `insert`, `insert_all`, `upsert`, and `upsert_all` now clear the query cache. *Eugene Kenny* diff --git a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb index afbe7384ef..f68df40a87 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract_mysql_adapter.rb @@ -440,11 +440,11 @@ def primary_keys(table_name) # :nodoc: query_values(<<~SQL, "SCHEMA") SELECT column_name - FROM information_schema.key_column_usage - WHERE constraint_name = 'PRIMARY' + FROM information_schema.statistics + WHERE index_name = 'PRIMARY' AND table_schema = #{scope[:schema]} AND table_name = #{scope[:name]} - ORDER BY ordinal_position + ORDER BY seq_in_index SQL end -- GitLab