diff --git a/openstackclient/compute/v2/flavor.py b/openstackclient/compute/v2/flavor.py
index 8a9eb07ad1..bc8f758bb1 100644
--- a/openstackclient/compute/v2/flavor.py
+++ b/openstackclient/compute/v2/flavor.py
@@ -333,7 +333,7 @@ class ListFlavor(command.Lister):
         # Even if server supports 2.61 some policy might stop it sending us
         # extra_specs. So try to fetch them if they are absent
         for f in data:
-            if not f.extra_specs:
+            if parsed_args.long and not f.extra_specs:
                 compute_client.fetch_flavor_extra_specs(f)
 
         columns = (
diff --git a/openstackclient/tests/unit/compute/v2/test_flavor.py b/openstackclient/tests/unit/compute/v2/test_flavor.py
index 14dd3df20a..33ebf54622 100644
--- a/openstackclient/tests/unit/compute/v2/test_flavor.py
+++ b/openstackclient/tests/unit/compute/v2/test_flavor.py
@@ -523,6 +523,7 @@ class TestFlavorList(TestFlavor):
         self.sdk_client.flavors.assert_called_with(
             **kwargs
         )
+        self.sdk_client.fetch_flavor_extra_specs.assert_not_called()
 
         self.assertEqual(self.columns, columns)
         self.assertEqual(self.data, tuple(data))
@@ -550,6 +551,7 @@ class TestFlavorList(TestFlavor):
         self.sdk_client.flavors.assert_called_with(
             **kwargs
         )
+        self.sdk_client.fetch_flavor_extra_specs.assert_not_called()
 
         self.assertEqual(self.columns, columns)
         self.assertEqual(self.data, tuple(data))
@@ -577,6 +579,7 @@ class TestFlavorList(TestFlavor):
         self.sdk_client.flavors.assert_called_with(
             **kwargs
         )
+        self.sdk_client.fetch_flavor_extra_specs.assert_not_called()
 
         self.assertEqual(self.columns, columns)
         self.assertEqual(self.data, tuple(data))
@@ -604,6 +607,7 @@ class TestFlavorList(TestFlavor):
         self.sdk_client.flavors.assert_called_with(
             **kwargs
         )
+        self.sdk_client.fetch_flavor_extra_specs.assert_not_called()
 
         self.assertEqual(self.columns, columns)
         self.assertEqual(self.data, tuple(data))
@@ -631,6 +635,58 @@ class TestFlavorList(TestFlavor):
         self.sdk_client.flavors.assert_called_with(
             **kwargs
         )
+        self.sdk_client.fetch_flavor_extra_specs.assert_not_called()
+
+        self.assertEqual(self.columns_long, columns)
+        self.assertCountEqual(self.data_long, tuple(data))
+
+    def test_flavor_list_long_no_extra_specs(self):
+        # use flavor with no extra specs for this test
+        flavor = compute_fakes.FakeFlavor.create_one_flavor(
+            attrs={"extra_specs": {}})
+        self.data = ((
+            flavor.id,
+            flavor.name,
+            flavor.ram,
+            flavor.disk,
+            flavor.ephemeral,
+            flavor.vcpus,
+            flavor.is_public,
+        ),)
+        self.data_long = (self.data[0] + (
+            flavor.swap,
+            flavor.rxtx_factor,
+            format_columns.DictColumn(flavor.extra_specs)
+        ),)
+        self.api_mock.side_effect = [[flavor], [], ]
+
+        self.sdk_client.flavors = self.api_mock
+        self.sdk_client.fetch_flavor_extra_specs = mock.Mock(return_value=None)
+
+        arglist = [
+            '--long',
+        ]
+        verifylist = [
+            ('long', True),
+        ]
+
+        parsed_args = self.check_parser(self.cmd, arglist, verifylist)
+
+        # In base command class Lister in cliff, abstract method take_action()
+        # returns a tuple containing the column names and an iterable
+        # containing the data to be listed.
+        columns, data = self.cmd.take_action(parsed_args)
+
+        # Set expected values
+        kwargs = {
+            'is_public': True,
+        }
+
+        self.sdk_client.flavors.assert_called_with(
+            **kwargs
+        )
+        self.sdk_client.fetch_flavor_extra_specs.assert_called_once_with(
+            flavor)
 
         self.assertEqual(self.columns_long, columns)
         self.assertCountEqual(self.data_long, tuple(data))
@@ -662,6 +718,7 @@ class TestFlavorList(TestFlavor):
         self.sdk_client.flavors.assert_called_with(
             **kwargs
         )
+        self.sdk_client.fetch_flavor_extra_specs.assert_not_called()
 
         self.assertEqual(self.columns, columns)
         self.assertEqual(tuple(self.data), tuple(data))
diff --git a/releasenotes/notes/story-2010343-b5eb4ed593f51d3f.yaml b/releasenotes/notes/story-2010343-b5eb4ed593f51d3f.yaml
new file mode 100644
index 0000000000..5e92f2f3ea
--- /dev/null
+++ b/releasenotes/notes/story-2010343-b5eb4ed593f51d3f.yaml
@@ -0,0 +1,8 @@
+---
+fixes:
+  - |
+    The ``flavor list`` command will no longer attempt to fetch extra specs
+    unless they are actually required (by using the ``--long``) option. This
+    should significantly improve performance on clouds with a large number of
+    flavors.
+    [Story `2010343 <https://storyboard.openstack.org/#!/story/2010343>`_]