如果表只有一个匹配结果,是否会将查询限制为一个结果记录,从而提高大型(ish)MySQL 表的性能?
例如
select * from people where name = "Re0sless" limit 1
如果只有一个具有该名称的记录?如果name
主键/设置为唯一呢?是否值得更新查询或者收益会很小?
如果该列有
唯一索引:不,它没有更快
非唯一索引:可能,因为它会阻止发送超出第一个匹配的任何其他行(如果存在)
无索引:有时
按顺序回答您的问题: 1) 是的,如果名称上没有索引。查询将在找到第一条记录后立即结束。取消限制,每次都必须进行全表扫描。2)没有。主键/唯一键保证是唯一的。查询应在找到该行后立即停止运行。
我相信 LIMIT 是在找到数据集并且正在构建结果集之后完成的,所以我不希望它有任何区别。将 name 设为主键将产生显着的积极影响,因为它会导致为列创建索引。
如果“名称”在表中是唯一的,那么通过对查询设置限制约束,可能仍然会有(非常非常小的)性能提升。如果 name 是主键,则可能没有。
是的,您在处理数据时会注意到性能差异。一条记录比多条记录占用的空间少。除非您要处理许多行,否则这不会有太大区别,但是一旦您运行查询,就必须将数据显示给您,这很昂贵,或者以编程方式处理。无论哪种方式,一条记录都比多条记录容易。