mySQL索引在什么时候开始与简单选择有关?

mySQL索引在什么时候开始与简单选择有关?,mysql,indexing,Mysql,Indexing,我有一张增长缓慢的表格,请致电人员 目前有50000条记录,每月增加约5000条 这是某人写的(不是我!) 谁没有添加任何索引, 还有许多查询使用非pk where子句 例如: select * from people where email = 'person@gmail.com'; 根据mysql命令行客户端,这将在“0”时间内执行 我还尝试了,试图进行一个较慢的查询: # attempt! select * from people where email like 'Name%'; #

我有一张增长缓慢的表格,请致电
人员

目前有50000条记录,每月增加约5000条

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

例如:

select * from people where email = 'person@gmail.com';
根据mysql命令行客户端,这将在“0”时间内执行

我还尝试了,试图进行一个较慢的查询:

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

# result
23 rows in set (0.00 sec)
我的理解是这样的查询会扫描整个表。
因此,如果50000行的完整表扫描所需时间少于1/100秒,

什么时候它会变慢?

当您开始加入表并执行比select*更复杂的查询时,您的性能会大大降低。或者一旦表开始变大(性能也取决于硬件,所以很难说何时需要添加索引)

虽然添加索引非常容易,但要在电子邮件列上添加索引,您只需执行以下操作:

ALTER TABLE people ADD INDEX (email);
对于50000条记录,创建一个索引来帮助查询(或者可能有多个索引,具体取决于查询及其运行频率)可能是有意义的。而且,由于每个月只添加5000条记录,索引的维护(假设没有很多其他更新)成本应该不会太高

我不知道这些结果的计时器有多精确,但在不到1/100秒的时间内进行完整表扫描似乎是可能的(取决于缓存的攻击性和物理记录大小)。我刚刚在自己的开发PC上运行了一个查询(使用完全不同的数据库引擎),在.013秒内对40000条记录进行了完整的表扫描。我的开发电脑也没什么特别的


(在MySQL数据库中,我手头没有50000条记录表,但我有40000条记录表可直接用于其他数据库。因此,比较可能不完全可比,但可能不是完全可比。)

你确定电子邮件列上没有索引吗?为什么不转到数据库的开发副本,向表中添加100000行,然后重试?然后添加200000?@在使用表架构和执行计划更新OP之前,所有这些问题都不会被视为真正的问题results@ajreal. 这不是关于一张特定的桌子。如果你真的阅读了这个问题,而不是做一些毫无价值的编辑,你就会明白这一点。@当你甚至没有包括执行计划的时候,你会怎么说服别人呢?忘记添加了,有一个叫做
查询缓存的东西
是的,它们很容易添加,但是没有它们的表的速度让我对内部工作产生了疑问。在什么时候它们有用,在什么条件下,等等。我惊讶地发现非索引查询速度如此之快。对于许多机器来说,50k记录并不是那么多,请尝试在
name
上自我加入几次,您会看到性能很快下降。
ALTER TABLE people ADD INDEX (email);