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)小智 6
索引的一般规则是它们可以加快大型数据集的数据检索速度,但会减慢记录的插入和更新速度。
如果您有数百万行,并且需要选择其中的一小部分,那么索引很可能会提高执行 SELECT 时的性能。(如果您需要其中的大部分或全部,则影响很小或没有影响。)
如果没有索引,就会发生表扫描(即读取每条记录以查找所需的记录),这可能会很慢。对于只有几条记录的表,表扫描实际上比索引更快,但这不是您的情况。另一个考虑因素是您有多少个离散值。如果您只有少数不同的日期,则索引可能不会有太大帮助(如果有的话),但是如果您有广泛的日期,则索引很可能会有所帮助。需要注意的是,如果索引非常大并且无法容纳在内存中,您可能无法获得您希望的性能优势。此外,您还需要考虑要检索的其他字段、连接等,因为它们都会产生影响。检查性能如何受到影响的一个好方法是使用 EXPLAIN 语句来查看 mySQL 将如何执行查询。