关于limit的使用场景

2023-05-16

什么情况下使用 limit 1呢?

当我们写sql语句的时候需要进行全表扫描,前提我们已经确认返回的结果只有一条数据的时候,使用limit(1),因为使用limit(1)之后,在查询过程中找到满足条件的那一条的数据记录的时候,就不会继续扫描全表了,而是直接返回数据结果;

当我们所查询的字段对应的是唯一索引字段时,就不需要使用limit(1)了,因为唯一索引在查找到满足一条记录的时候就不会往下继续找了,因为唯一索引的原因;

唯一索引:不允许具有索引值相同的行,从而禁止重复的索引或键值,系统在创建该索引的时候检查是否有重复的键值,并在每次使用INSERT或UPDATE语句添加数据时进行检查;

举个栗子:
某些情况下,如果明知道查询结果只有一个,SQL语句中使用LIMIT 1会提高效率

用户表(主键id,邮箱,密码)

1 create table u_user( 
2   id int primary key auto_increment, 
3   email varchar(255), 
4   password varchar(255) 
5 ); 

每个用户的email是唯一的,如果用户使用email作为用户名登陆的话,就需要查询出email对应的一条记录

1 SELECT * FROM u_user WHERE email=?; 

上面的语句实现了查询email对应的一条用户信息,但是由于email这一列没有加索引,会导致全表扫描,效率会很低。

1 SELECT * FROM t_user WHERE email=? LIMIT 1; 

加上LIMIT 1,只要找到了对应的一条记录,就不会继续向下扫描了,效率会大大提高。
LIMIT 1 适用于查询结果为1条(也可能为0)会导致全表扫描的的SQL语句。

如果email是索引的话,就不需要加上LIMIT 1,如果是根据主键查询一条记录也不需要LIMIT 1,主键也是索引。

举个例子:

1 SELECT * FROM t_user WHERE id=?; 

就不需要写成:

1 SELECT * FROM t_user WHERE id=? LIMIT 1; 

二者效率没有区别。

存储过程生成100万条数据:

 1 BEGIN 
 2 DECLARE i INT; 
 3 START TRANSACTION; 
 4 SET i=0; 
 5 WHILE i<1000000 DO 
 6 INSERT INTO t_user VALUES(NULL,CONCAT(i+1,'@xxg.com'),i+1); 
 7 SET i=i+1; 
 8 END WHILE; 
 9 COMMIT; 
10 END 

查询语句

 SELECT * FROM t_user WHERE email=' aliyunzixun@xxx.com'; 耗时0.56 s 
  SELECT * FROM t_user WHERE email=' aliyunzixun@xxx.com' LIMIT 1; 耗时0.00 s 

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于limit的使用场景 的相关文章

  • 如何在Scala中编写极限函数?

    在想知道我的第一个 Scala 应用程序中的某些错误后 我发现我的 limit 函数根本不起作用 所以这是我的第一次尝试 def limit x Double min Double max Double if x lt min min if
  • 为什么 Unicode 限制为 0x10FFFF?

    为什么最大 Unicode 代码点限制为 0x10FFFF 是否可以在该代码点之上表示 Unicode 例如0x10FFFF 0x000001 0x110000 通过任何编码方案 如 UTF 16 UTF 8 It s because of
  • Fabric.js 使用旋转手柄将旋转限制为 x 度

    我正在使用 Fabric js 并尝试使用旋转手柄允许画布上的任何对象旋转 不是自由 360 度 而是一次只能旋转 15 度 我非常努力地搜索 但到目前为止找不到答案 这可能吗 更短的解决方案 canvas on object rotati
  • 如何选择每组的前N行

    我的三重存储中有一些数据 例如 Subject Predicate Object
  • mysql 选择内部限制

    select id from tableABC limit select count id from tableCBA 1 如果我需要在限制中进行选择 如我在示例代码中所示 我该如何在 mySql 中执行此操作 这只是本论坛的简化代码 否则
  • SQL 分页查询 order by

    我正在尝试编写一个查询来提取多个字段并为其分配别名 其中一个别名实际上是两个字段的总和 这实际上是我最大的问题 因为该别名是可能进行排序的 字段 之一 否则我可以删除所有别名而不会出现此问题 无论如何 我需要能够传入一个以编程方式排序的字段
  • 我可以将用户限制在 Google 地图上的特定范围和缩放级别吗?

    我正在网页上实现 Google 地图 出于本项目的目的 我想限制用户可以拖动地图的距离 以便他们只能查看位于两个坐标内的某个区域 一个指定西北 另一个指定东南 如果你明白我的意思 使用 Google Maps API 实现此目的的最佳方法是
  • 限制后获取另一个订单

    想象一下 我有一个表 用户 其中包含两个字段 年龄 和 姓名 我想检索前十名老用户 然后我希望这十个用户的列表按名称排序 可以用MySQL来做吗 我试过这个 不起作用 SELECT FROM users order by age name
  • (iPhone)当仪器显示“所有分配”只有 7MB 时,我的应用程序收到内存警告?

    正如问题所说 它在 7mb 时就死掉了 这是正常的吗 7MB 仪器显示无泄漏 谢谢 EDIT 已编辑 17mb gt 7mb 我通过删除分配的不必要的池来降低内存使用量 尽管如此 它还是在 7 MB 时收到内存警告 我本质上是在创建图像并在
  • LIMIT then RAND 而不是 RAND then LIMIT

    我正在使用全文搜索来提取行 我根据分数对行进行排序 ORDER BY SCORE 然后在前 20 行 LIMIT 20 中 我想对结果集进行兰特 RAND 操作 因此 对于任何特定的搜索词 我想随机显示前 20 个结果中的 5 个 我的解决
  • SQL 查询限制来自一个表的行,而不是结果集

    我正在运行一个带有连接的简单查询 类似于 SELECT t1 a t2 b FROM t1 LEFT JOIN t2 ON LIMIT 5 As t1有很多行t2 任何大于 2 的数字 LIMIT 语句不会返回前 5 行t1以及来自的相应条
  • Python 函数中参数的最大数量是多少?

    众所周知 Python 函数最多可以有 256 个参数 我很想知道这个限制是否适用于 args and kwargs当它们以下列方式展开时 items 1 2 3 4 5 6 def do something items pass 我问这个
  • Perl:现实生活中的字符串长度限制

    同时 例如 perldata http perldoc perl org perldata html文档表明 Perl 中的标量字符串仅受可用内存的限制 我强烈怀疑在现实生活中还会有一些其他限制 我正在考虑以下想法 我不确定 Perl 中如
  • 发布到 Microsoft Teams 连接器 Webhook 时消息可以有多长?

    我正在将 CI CD 系统的结果 日志发布到 Microsoft Teams 在处理一些具有较长结果的失败构建时 我偶然发现了 webhook URL 返回的以下错误https outlook office com webhook bb6b
  • Laravel 事件超出 Pusher 允许的限制

    我的 Laravel 应用程序中有一个事件 对于特定记录 它超出了 Pusher 允许的最大限制 10240 字节 Laravel 序列化 Event 类上的每个公共属性是否正确 如果是这样 我怀疑序列化模型不应超过 10kb 限制 但无论
  • 使用 SQLite 查找查询中行的差异

    我有一个SQLite包含各种产品价格的表 它是一个快照表 因此包含 5 分钟间隔的价格 我想编写一个查询 该查询将返回每件商品从一行到下一行的价格差异 这些列是 id 自动增量 record id 产品的 id 价格 该时间点的价格 时间
  • 我可以绕过 Windows 中 Statc 级联上下文菜单的 20 项限制(注册表项/子项)

    我正在为 Windows 中的 ImageMagick 创建详细的静态级联上下文菜单 一切似乎在功能方面都运行良好 直到我通过上下文菜单传递了 20 个项目 此后 单击命令将停止正常运行 项目也会消失 我知道这不是格式问题 因为我可以通过删
  • 广告标识符 [IDFA] 使用不当(限制广告跟踪)

    我正在向应用商店提交 iOS 游戏更新 xcode 显示以下错误 广告标识符 IDFA 使用不当 您的应用程序包含广告标识符 IDFA API 但您的应用程序不遵守 iOS 中的限制广告跟踪设置 我没有更改任何有关广告设置的内容 并且我的应
  • Clojure/Ring:使用环码头适配器,大请求会给我一个 413: FULL HEAD 错误。

    使用 Ring 的 Jetty 适配器 如果我的请求太大 我会收到 413 FULL HEAD 错误 我追踪到一个名为 headerbuffersize 的属性 但是当我尝试在 run jetty 调用中设置它时 我仍然得到 413 有没有
  • 使用 Upstart 设置内存消耗限制

    我最近变得非常喜欢Upstart 之前我一直在使用 God Monit 和 Bluepill 但我不太喜欢这些解决方案 所以我尝试一下 Upstart 我一直在使用 Foreman gem 为我的流程生成一些基本的 Upstart 配置文件

随机推荐

  • ae 渲染选项_好的MPlayer选项,以提高视频渲染质量

    ae 渲染选项 MPlayer has lots options for video rendering and filtering Any suggestions on good MPlayer options that improve
  • Nuxt.js 概述 安装 目录结构说明

    什么是SEO SEO xff1a 搜索引擎优化 xff08 Search Engine Optimization xff09 通过各种技术 xff08 手段 xff09 来确保 xff0c 我们的Web内容被搜索引擎最大化收录 xff0c
  • Nuxt.js路由

    路由 路由概述 Nuxt js 依据 pages 目录结构自动生成 vue router 模块的路由配置 要在页面之间切换路由 xff0c 我们建议使用 nuxt link 标签 基础路由 自动生成基础路由规则 情况1 xff1a 访问路径
  • Nuxt.js 视图

    视图 默认模板 定制化默认的 html 模板 xff0c 只需要在应用根目录下创建一个 app html 的文件 默认模板 xff1a span class token doctype span class token punctuatio
  • Nuxt.js整合axios

    整合 axios 默认整合 在构建项目时 xff0c 如果选择axios组件 xff0c nuxt js将自动与axios进行整合 手动整合 步骤1 xff1a package json有axios的版本 34 dependencies 3
  • Vuex 状态树

    根模块数据操作 步骤一 xff1a 创建 store index js 添加一个 counter变量 xff0c 并可以继续累加操作 export const state 61 61 gt counter 0 export const mu
  • Nuxt.js查询学生列表案例

    查询所有的班级 xff1a 后端 父工程pom文件 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt project xmlns 61 34 http maven apach
  • 大数据面试题

    Hive理论知识汇总 1 Hive和数据库比较 Hive 和数据库除了拥有类似的查询语言 xff0c 再无类似之处 1 xff09 数据存储位置 Hive 存储在 HDFS 数据库将数据保存在块设备或者本地文件系统中 2 xff09 数据更
  • MyBatis Plus

    概述 简介 MyBatis Plus xff08 简称 MP xff09 是一个 MyBatis 的增强工具 xff0c 在 MyBatis 的基础上只做增强不做改变 xff0c 为简化开发 提高效率而生 特点 无侵入 xff1a 只做增强
  • MybatisPlus--QueryWrapper

    QueryWrapper wrapper介绍 Wrapper xff1a 条件构造抽象类 xff0c 最顶端父类 AbstractWrapper xff1a 用于查询条件封装 xff0c 生成 sql 的 where 条件 QueryWra
  • 大数据导论题库

    选择题 1 下面哪个程序负责 HDFS数据存储 C A NameNode B Jobtracker C Datanode D secondaryNameNode 2 HDfS 中的 block 默认保存几份 A A 3份 B 2 份 C 1
  • Oracle Linux7.8 下离线 一键静默安装Oracle12c

    目录 安装前的准备最小安装OracleLinux7 8 xff08 centos7 8一样 xff09 安装oracle需要的依赖包 准备Oracle安装包准备一键安装脚本 并执行脚本使用安装前配置 问题及解决方法 xff1a 错误码ORA
  • MybatisPlus-插件机制-乐观锁-逻辑删除-通用service

    插件机制 自动填充 项目中经常会遇到一些数据 xff0c 每次都使用相同的方式填充 xff0c 例如记录的创建时间 xff0c 更新时间等 我们可以使用MyBatis Plus的自动填充功能 xff0c 完成这些字段的赋值工作 原理 实现元
  • 畅购商城项目--(用户模块+用户注册【用户名占用】)

    搭建环境 4 1 1 后端web服务 xff1a changgou4 service web 修改pom xml文档 lt xml version 61 34 1 0 34 encoding 61 34 UTF 8 34 gt lt pro
  • Mysql对于列中存储键值对数据的查询

    对于键值对数据的查询 为了方便查看 xff0c 将其称之为A表 A表 xff1a 可以看到A表中的列有 id inquiry id data key data value date key列中的各个字段对应的data value中的各个数据
  • PathVariable注解的用法以及报错

    今天碰见个很奇怪的问题 xff0c 因为之前在学校没怎么用过 64 PathVariable这个注解 xff0c 但是postman测试时并没有请求到 xff0c 具体如下 接口就是一个简单的查询详情 xff0c 而当我请求postman的
  • 关于@PreAuthorize注解的使用场景

    作用 64 PreAuthorize 能够在执行方法之前进行权限的认证 xff0c 支持Spring EL表达式 xff0c 基于方法注解和权限解决方案 xff0c 并且只有当 64 EnableGlobalMethodSecurity p
  • 获取 当前时间的前五天凌晨0点的时间

    公司今天提到的需求是 xff1a 每日凌晨两点 xff0c 调用方法 xff0c 方法的内容是 xff1a 拉取当前时间的前五天的0点的消息聊天记录 在网上查了好久才找到 xff0c 现在奉上代码 xff1a span class toke
  • 查询 按照 指定时间的前一天的数据

    需求 xff1a 查询按照指定时间的前一天的数据 xff0c 举个例子 xff1a 传入2023 2 27 xff0c 需要获取到2023 2 26 的数据 xff0c 如果这一天没有数据 xff0c 那就需要往前找 xff0c 直到找不到
  • 关于limit的使用场景

    什么情况下使用 limit 1呢 xff1f 当我们写sql语句的时候需要进行全表扫描 xff0c 前提我们已经确认返回的结果只有一条数据的时候 xff0c 使用limit 1 xff0c 因为使用limit 1 之后 xff0c 在查询过