【问题标题】:Creating and utilizing MySQL Indexes创建和使用 MySQL 索引
【发布时间】:2015-08-11 02:24:42
【问题描述】:

我正在阅读有关 MySQL 索引的内容,但仍有一些问题。

首先我有一个带有 MySQL InnoDB 数据库的 ASP.NET 应用程序。我有一个名为userstable 的表,其中包含以下列:last_namemiddle_namefirst_nameemail

如果我想根据姓氏创建索引,我可以这样创建索引:

CREATE INDEX last_name_index ON userstable (last_name);

现在我有以下查询来选择数据,我的问题是是否必须修改这个常规 SQL 查询才能使用索引?如果有,怎么做?

SELECT * FROM userstable WHERE last_name="johnson"

我还了解到,如果您向表中添加行,则必须更新索引,因为索引可能会过期。

这是否意味着我应该在表格中每隔这么多条目就任意发出这个命令CREATE INDEX last_name_index ON userstable (last_name);

【问题讨论】:

    标签: mysql asp.net indexing


    【解决方案1】:

    SQL 引擎自动使用索引。通常,优化器会确定索引是否合适以及用于查询的索引(可能不止一个适用)。

    您的查询通常会使用索引。一个例外可能是表只有几行。然后扫描表可能比索引查找更快。

    至于保持索引是最新的,这也是自动完成的。你真的不必担心它。如果您进行大量删除和更新,您的索引(和表)最终可能会比从头开始创建的效率低。这种现象称为索引碎片(并记录在here)。因此,在某些情况下,为了维护数据库并保持其清洁,您确实需要重建索引。但是,这很少见,并且在您只是插入新值的表上通常不需要。

    【讨论】:

    • 感谢您的快速回复。在您的第二段中,您说我的查询通常会使用索引,这是否意味着我的简单 SELECT * FROM userstable WHERE last_name="johnson" 查询已经使用了索引?即我根本不需要显式更改该查询以让数据库使用索引?
    • @CDuran 。 . .完全没有变化。您可以查看说明计划以查看是否可以。 (只需在查询前加上说明,即可获得执行步骤。)
    猜你喜欢
    • 2018-10-30
    • 2012-12-12
    • 1970-01-01
    • 1970-01-01
    • 2018-10-28
    • 2013-08-20
    • 1970-01-01
    • 1970-01-01
    • 2021-02-07
    相关资源
    最近更新 更多