我有一个包含大量记录(> 300,000)的表。表格中最相关的字段是:
每次添加或更新记录时,这些记录都会更新。
现在,我需要查询该表以查找上次修改的记录的日期。我目前正在使用
SELECT mod_date FROM table ORDER BY mod_date DESC LIMIT 1;
但是我想知道这是否是获得答案的最有效方法。
我尝试添加一个where clause来将日期限制为上个月,但实际上看起来比较慢(并且我需要最新的日期,该日期可能早于上个月)。
where clause
我还尝试了我在其他地方阅读过的建议以使用:
SELECT UPDATE_TIME FROM information_schema.tables WHERE TABLE_SCHEMA = 'db' AND TABLE_NAME = 'table';
但是由于我可能正在处理原始文件的转储,因此该查询可能会导致结果为NULL。而且看起来这实际上比原始查询要慢。
我无法求助,last_insert_id()因为我没有更新或插入。
last_insert_id()
我只想确保我拥有最有效的查询。
此查询最有效的方法是为该列使用索引MOD_DATE。
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