【问题标题】:Is there a way to automatically generate a list of columns that need indexing?有没有办法自动生成需要索引的列列表?
【发布时间】:2026-01-03 09:05:02
【问题描述】:

ORM 的美丽让我睡着了。我有一个缺少数据库索引的现有 Django 应用程序。有没有办法自动生成需要索引的列列表?

我在想也许一些中间件会记录 WHERE 子句中涉及哪些列?但是 MySQL 中是否有内置的东西可能会有所帮助?

【问题讨论】:

    标签: python mysql database django django-models


    【解决方案1】:

    是的,有。

    如果你看一下slow query log,有一个选项--log-queries-not-using-indexes

    【讨论】:

    • 太糟糕了,没有关于更通用解决方案的帖子,比如提到的中间件。
    • 上述中间件将仅显示作为索引候选的列,而慢查询日志将向您显示实际建议(由于特定于 MySQL 的服务器优化,可能会有所不同)。
    【解决方案2】:

    没有。

    为所有“慢”查询添加索引也会减慢插入、更新和删除的速度。

    索引是快速查询和快速更改之间的平衡。没有一般的或“正确”的答案。肯定没有什么可以自动执行此操作。

    您必须在添加和更改索引时衡量整个应用程序的改进。

    【讨论】:

    • 在我的情况下,就像在许多 Web 应用程序中一样,它的读取量很大 - 写入仅限于管理员,并且表大小相当小。在这种情况下,您是否同意为查找中使用的所有列添加索引是有益的?
    • @andybak:Willy-Nilly 索引是一个糟糕的计划。一些索引似乎是个好主意,但必须真正受益。两条规则:(1)一次改变一件事; (2) 前后测量。永远不要枪毙一堆变化和希望。