我有一张桌子正在缓慢增长,请致电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秒,则 在什么时候它实际上变慢了?
答案 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);