当前位置: 首页 > 面试题库 >

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

酆景辉
2023-03-14
问题内容

我有一个包含大量记录(> 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()因为我没有更新或插入。

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


问题答案:

此查询最有效的方法是为该列使用索引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



 类似资料:
  • 问题内容: 有没有办法只选择目录中的最后一个文件(带有扩展名?) 还是我必须解析整个目录并使用检查? 问题答案: 是的,您必须通读它们。但是由于目录访问已被缓存,因此您不必担心。

  • 我是使用NodeJS的这个cassandra数据库的新手。

  • 问题内容: 我使用以下查询将多个记录插入到表中: 由于查询要插入多个记录,因此无法使用 SCOPE_IDENTITY 来检索PK。有什么方法可以获取最近插入记录的ID? 问题答案: SCOPE_IDENTITY()将正确为您提供LAST ID。您需要将其与@@ Rowcount结合使用,以提供ID范围。 正如其他Richard指出的那样 ,这仅在您将增量设置为1时有效 例如: 执行此操作的另一种方

  • 问题内容: 我是mybatis的新手。我正在尝试获取最后插入的记录的ID。我的数据库是mysql而我的映射器xml是 我认为在这里写的语句“ SELECT LAST_INSERT_ID()as id”应该返回最后插入的记录的id,但是插入记录后我总是得到1。 我的mapper.java类有方法 在我的课堂上,我正在使用 int id = fileAttachmentMapper.insertSel

  • 问题内容: 我正在使用C程序,需要获取文件的最后修改时间。程序要做的是一个函数循环遍历目录中的每个文件,当找到特定文件时,它将调用另一个函数来检查文件的最后修改时间。 在该目录下有一个,和等当我使用ll命令我可以看到,列出目录在linux 和进行了修改,在5月4日,并于5月3日进行了修改。 但是,当程序检查这些文件中的每个文件时,它总是会返回3rd may。下面是我正在使用的代码。 我尝试了的所有

  • 问题内容: 我有一个包含以下列的数据库表: 在此表中,唯一的唯一值位于id中,即主键。 我想基于datetime值检索该表中的最后一组不同的记录。例如,下面是我的桌子 我想检索ID为4、7、8和9的记录,即具有不同代码(基于datetime值)的最后一组记录。我强调的只是我要实现的目标的一个示例,因为此表最终将包含数百万条记录和数百个单独的代码值。 我可以使用什么SQL语句来实现这一目标?我似乎无