小编典典

获取大表中最后修改的记录的最有效查询

sql

我有一个包含大量记录(> 300,000)的表。表格中最相关的字段是:

  • CREATE_DATE
  • MOD_DATE

每次添加或更新记录时,这些记录都会更新。

现在,我需要查询该表以查找上次修改的记录的日期。我目前正在使用

SELECT mod_date FROM table ORDER BY mod_date DESC LIMIT 1;

但是我想知道这是否是获得答案的最有效方法。

我尝试添加一个where clause来将日期限制为上个月,但实际上看起来比较慢(并且我需要最新的日期,该日期可能早于上个月)。

我还尝试了我在其他地方阅读过的建议以使用:

SELECT UPDATE_TIME
FROM   information_schema.tables
WHERE  TABLE_SCHEMA = 'db'
   AND TABLE_NAME = 'table';

但是由于我可能正在处理原始文件的转储,因此该查询可能会导致结果为NULL。而且看起来这实际上比原始查询要慢。

我无法求助,last_insert_id()因为我没有更新或插入。

我只想确保我拥有最有效的查询。


阅读 157

收藏
2021-04-14

共1个答案

小编典典

此查询最有效的方法是为该列使用索引MOD_DATE

MySQL如何使用索引

8.3.1 MySQL如何使用索引
索引用于快速查找具有特定列值的行。没有索引,MySQL必须从第一行开始,然后通读整个表以找到相关的行。桌子越大,花费越多。如果表中有相关​​列的索引,MySQL可以快速确定要在数据文件中间查找的位置,而不必查看所有数据。如果一个表有1,000行,则它比顺序读取至少快100倍。

您可以使用

SHOW CREATE TABLE UPDATE_TIME;

获取CREATE语句,并查看是否在MOD_DATE上定义了索引。

要添加索引,您可以使用

CREATE INDEX

CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (index_col_name,...)
    [index_option]
    [algorithm_option | lock_option] ...

参见http://dev.mysql.com/doc/refman/5.6/en/create-
index.html

2021-04-14