Mysql 我是否必须使用;“仅获取前n行”;或;“限制”;在where子句中选择唯一id时

Mysql 我是否必须使用;“仅获取前n行”;或;“限制”;在where子句中选择唯一id时,mysql,sql,postgresql,db2,Mysql,Sql,Postgresql,Db2,我想知道如果我使用表中的索引查询唯一id以提高性能,是否必须在DB2中使用fetchfirstn ROWS ONLY语句,或者在MySQL中使用LIMIT语句。或者sql提供程序是否已经注意到,当找到行时,最多只会有一个结果并停止查询 查询示例: DB2:从myTable中选择*,其中id=1只获取前1行 MySQL:从myTable中选择*,其中id=1限制1 有人已经考虑过这个问题吗?在Db2中,您可以同时使用仅获取前1行和限制,请检查 如果只返回一行,那么是否指定该语法并不重要。但是,如果

我想知道如果我使用表中的索引查询唯一id以提高性能,是否必须在DB2中使用
fetchfirstn ROWS ONLY
语句,或者在MySQL中使用
LIMIT
语句。或者sql提供程序是否已经注意到,当找到行时,最多只会有一个结果并停止查询

查询示例:
DB2:
从myTable中选择*,其中id=1只获取前1行

MySQL:
从myTable中选择*,其中id=1限制1


有人已经考虑过这个问题吗?

在Db2中,您可以同时使用
仅获取前1行
限制
,请检查

如果只返回一行,那么是否指定该语法并不重要。但是,如果您或系统不确定,则这是一种额外的保护措施。根据优化器设置(或情绪、统计或元数据),附加语法可能有助于提高性能。原因是数据库系统知道只应返回1行,并且可以针对这种情况进行优化


如果id上有唯一的索引,那么这应该是显而易见的,但是有索引吗?

如果属性被声明为唯一的,我强烈建议不要这样做,原因有两个:

  • 它不会以任何方式提高moder优化器的性能,只会增加SQL优化器的工作量,而SQL优化器需要处理另一个子句

  • (最重要的是)它降低了代码维护人员对语句的可读性,因为它会给人一种属性不是唯一的印象,从而导致对查询和底层表的混淆


  • 在mylsq中,限制应用于选择的结果。。因此,您没有性能改进,那么
    仅获取前1行如何呢
    ?我不在db2中,但是。。我想也是一样。。这种限制/过滤器只能应用于结果集。。性能基于结果集检索如果您在
    id
    上已经有了唯一的索引,那么通常优化器必须知道这样的查询不能返回多行。如果您在
    id
    上没有这样一个唯一的索引,那么帮助优化器构建更好的访问计划可能是值得的。是的,那一行上有一个索引。我编辑了这个问题。那么,是否有必要指定限制声明?我的回答已经包括了它。没有必要,但我出于习惯还是会这样做的。当您在Db2中启用对LIMIT的支持时,您可以使用更短的语法