【问题标题】:Index on a table that fetches all fields, all rows获取所有字段、所有行的表上的索引
【发布时间】:2018-07-12 02:49:35
【问题描述】:

索引包含配置值的实用程序表的正确方法是什么?

例如,考虑一个简单的表,它有 15 个字段和几十行,一些应用程序小部件的配置值。

每次页面加载时都会多次加载和调用此小部件,并获取整个表格。

要优化的查询类似于select *,因为它会选择所有字段:

SELECT t0.id AS id_1, t0.created_at AS created_at_2, t0.updated_at AS updated_at_3, t0.color AS color_4, t0.name AS name_5, t0.other_name AS other_name_6, t0.license AS license_7, t0.phone AS phone_8, t0.phone1800 AS phone1800_9, t0.fax AS fax_10, t0.address AS address_11, t0.city AS city_12, t0.province AS province_13, t0.postcode AS postcode_14, t0.latitude AS latitude_15, t0.longitude AS longitude_16, t0.abc AS abc_17, t0.sig_name AS sig_name_18 FROM widget t0;

你可能已经通过格式猜到了,它是由 ORM 生成的。

我想知道是否以及如何检查以这种方式使用的表格。

【问题讨论】:

  • 在没有任何WHERE 子句或其他限制的情况下获取所有记录的查询不一定会从索引中受益。当您想从整个表中选择记录的子集时,索引很有用。
  • @TimBiegeleisen - 我的第一印象也是,但为什么这会出现在我启用捕获慢查询的 slow_query_log 中?这是一个返回 4 行的简单查询。它在 slow_query 日志中显示的事实让我很困惑。
  • 我会忽略这么小的表的统计信息。

标签: mysql sql


【解决方案1】:

一个包含 15 个字段和几十行的简单表格

不需要索引任何东西。它只有几行,几乎不会对数据库造成任何负载。

或者,将表加载到内存中,并从缓存中响应,而不是每次都查询数据库。

【讨论】:

    猜你喜欢
    • 2012-10-15
    • 1970-01-01
    • 2014-08-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-12
    相关资源
    最近更新 更多