首页 > 试题广场 >

在 MySQL 中有这样一个表,记录用户的订单信息: Cre

[单选题]
在 MySQL 中有这样一个表,记录用户的订单信息:
Create Table orders(
    id int primary key auto_increment,
    title varchar(100) not null,
    status int not null,
    context text
) engine=innodb;
有一亿行数据且严格按照 id 递增,且订单 90% 的 title 都是以 xiaomi 开头的;我目前想查询订单以 `xiaomi` 开头的最近 10 条订单的状态(status) 信息,执行这样一个查询性能不佳的语句:

select * from orders where title like '%xiaomi%' order by id;
仅有以下措施可选,现在只能让你做其中唯一一个,你认为最有效的是:()
  • 修改查询列的列表为 id, status
  • 建立 title 列的索引
  • 在 sql 末尾添加 limit 10
  • 修改查询条件 like '%xiaomi%' 为 like 'xiaomi%'
like 属于模糊查询,查询订单以 `xiaomi` 开头,表明不是以xiaomi开头和结尾的订单,多了两个单引号,所以前后要加“%”,limit 10 就是指取前10条的信息。
发表于 2019-08-30 23:27:33 回复(3)
sql中使用了like,即使创建索引,也不会根据索引查询
发表于 2019-07-24 12:21:37 回复(4)
不加条件就瞎说,‘%字段%’这个才是不会触发索引,‘字段%’就是为了在使用like模糊查询的时候触发索引使用的
发表于 2021-02-11 09:56:37 回复(2)
对于like,在以通配符%或_开头查询时,不会使用索引
发表于 2020-08-27 14:55:28 回复(0)
这题有问题,要查询最近的10条,应该是order by id desc,因为id越大,表示发生时间越晚
发表于 2020-07-27 17:16:47 回复(1)
只有limit才不会全表扫描
发表于 2021-06-06 01:07:01 回复(0)

LIMIT [row][offset]
LIMIT 10 = LIMIT 0 10
即从索引为0开始即第一条记录开始向后选10条记录

由于id是auto_increment所以id越大越是最近 =》 所以后面应该ORDER BY id DESC降序排列再选取前10行即可。

mysql> SELECT * FROM table LIMIT 5,10; // 检索记录行 6-15

//为了检索从某一个偏移量到记录集的结束所有的记录行,可以指定第二个参数为 -1:    
mysql> SELECT * FROM table LIMIT 95,-1; // 检索记录行 96-last.   

//如果只给定一个参数,它表示返回最大的记录行数目:    
mysql> SELECT * FROM table LIMIT 5*; //检索前 5 个记录行   
编辑于 2021-03-11 22:27:19 回复(0)
我选c 因为c最快 不过查出来的是物理最近,不是时间最近
发表于 2023-11-29 20:24:29 回复(0)
limit一般用在select后,具体语法为:
                                limit [a,]b  
a可选属性,b必选属性,若有a表示跳过a行选b行元组数据。
发表于 2022-03-23 09:50:31 回复(0)
想要查到最新的记录必须order by id desc 然后limit

因为id是主键所以不需要全局排序

  • 在 sql 末尾添加order by id desc limit 10

发表于 2021-10-04 21:54:59 回复(0)
有疑问!!!查询订单以'xiaomi'开头,不是'xiaomi%'这个意思吗???
发表于 2020-06-21 16:22:50 回复(2)
小白。我不是很懂,既然要查询以xiaomi开头的订单,那么为什么在开头还要加%,%不是表示匹配0或多个字符吗?
编辑于 2023-12-27 17:09:58 回复(0)
默认是升序啊
发表于 2023-03-23 20:30:15 回复(0)
为什么限制查询列不行?
发表于 2020-10-08 13:54:37 回复(0)
只有limit才不会全表扫描
发表于 2020-08-06 13:37:14 回复(0)