通过简单的选择,mySQL索引在什么时候开始重要?

时间:2011-08-10 17:37:02

标签: mysql indexing

我有一张桌子正在缓慢增长,请致电people 目前有50,000条记录,每月增加约5000条。

这是由某人写的(不是我!)
谁没有添加任何索引,
并且有许多查询使用非pk where子句。

例如:

select * from people where email = 'person@gmail.com';

根据mysql命令行客户端,这在“0”时间执行...

1 row in set (0.00 sec)

我也试过,试图做一个较慢的查询:

# attempt!
select * from people where email like 'Name%';

# result
23 rows in set (0.00 sec)

我的理解是像这样的查询进行全表扫描 因此,如果50,000行的全表扫描需要少于1/100秒,则 在什么时候它实际上变慢了?

2 个答案:

答案 0 :(得分:2)

对于50,000条记录,可能有意义创建索引来帮助查询(或者可能有多个索引,具体取决于查询及其运行频率)。并且每月只添加5,000条记录,索引的维护(假设没有很多其他更新)不应该非常昂贵。

我不知道计时器对于这些结果的准确程度如何,但似乎有可能在不到1/100秒的时间内进行全表扫描(取决于缓存的激进程度和大小程度)物理记录大小是)。我刚刚在我自己的开发PC上运行了一个查询(使用完全不同的数据库引擎),它在.013秒内完成了40,000条记录的全表扫描。而我的开发PC并不特别。

(我在MySQL数据库中没有方便的50,000记录表,但我确实有40,000条记录可以立即用于不同的数据库。所以这种比较可能不完全可比,但它可能并不完全出去吃午饭。)

答案 1 :(得分:1)

当你开始加入表并执行比select *更复杂的查询时,你会遇到很多性能下降。或者一旦你的桌子开始变得更大(性能也取决于你的硬件,所以很难说你什么时候需要添加索引)。

索引很容易添加,但要在电子邮件列中添加索引,您只需执行:

ALTER TABLE people ADD INDEX (email);