它是否提高了索引日期列的性能?

Gen*_* S. 10 mysql indexing optimization

我有一个包含数百万行的表,其中一列是TIMESTAMP,我经常选择日期范围.是否可以提高性能以对该列进行索引,还是不会提供任何显着的改进?

编辑:

所以,我已经将TIMESTAMP列编入索引.以下查询 select count(*) from interactions where date(interaction_time) between date('2013-10-10') and date(now())

需要3.1秒.

交互表中只有300多万条记录.

上面的查询产生~976k的结果

这似乎是合理的时间来执行此任务吗?

ype*_*eᵀᴹ 18

如果要提高查询效率,需要做两件事:

  • 首先,索引列.

  • 其次,这是更重要的,请确保您的查询条件可优化搜索,即可以使用索引.特别是,不应在列上使用函数.在您的示例中,编写条件的一种方法是:

    WHERE interaction_time >= '2013-10-10' 
      AND interaction_time < (CURRENT_DATE + INTERVAL 1 DAY)
    
    Run Code Online (Sandbox Code Playgroud)

  • 极好的!这使得它从 3.1 秒降至 1.5 秒。 (2认同)

小智 6

索引的一般规则是它们可以加快大型数据集的数据检索速度,但会减慢记录的插入和更新速度。

如果您有数百万行,并且需要选择其中的一小部分,那么索引很可能会提高执行 SELECT 时的性能。(如果您需要其中的大部分或全部,则影响很小或没有影响。)

如果没有索引,就会发生表扫描(即读取每条记录以查找所需的记录),这可能会很慢。对于只有几条记录的表,表扫描实际上比索引更快,但这不是您的情况。另一个考虑因素是您有多少个离散值。如果您只有少数不同的日期,则索引可能不会有太大帮助(如果有的话),但是如果您有广泛的日期,则索引很可能会有所帮助。需要注意的是,如果索引非常大并且无法容纳在内存中,您可能无法获得您希望的性能优势。此外,您还需要考虑要检索的其他字段、连接等,因为它们都会产生影响。检查性能如何受到影响的一个好方法是使用 EXPLAIN 语句来查看 mySQL 将如何执行查询。