16|“orderby”是怎么工作的?以市民表为例,假设要查询城市是“杭州”的所有人名字,并且按照姓名排序返回前1000个人的姓名、年龄。这个表的部分定义:CREATETABLE`t`(`id`int(11)NOTNULL,`city`varchar(16)NOTNULL,`name`varchar(16)NOTNULL,`age`int(11)NOTNULL,`addr`varchar(128)DEFAULTNULL,PRIMARYKEY(`id`),KEY`city`(`city`))ENGINE=InnoDB;SQL语句可以这么写:selectcity,name,agefromtwher
前置知识Usingfilesort:表示需要用到sortbuffer内存空间进行排序sortbuffer是一块可调整的内存空间,如果需要排序的数据量太大而空间不够,将用到磁盘临时文件来排序,效率很低什么情况下会用到sortbuffer来排序?不能根据索引直接知道排序结果,就需要用到sortbuffer排序的执行情况?表T:id(primarykey),city(key),name,age等字段explainselectcity,name,agefromTwherecity='gz'orderbyname;--走了索引(但是是非覆盖索引),需要排序,需要进行回表查询--Usingindexcon
前置知识Usingfilesort:表示需要用到sortbuffer内存空间进行排序sortbuffer是一块可调整的内存空间,如果需要排序的数据量太大而空间不够,将用到磁盘临时文件来排序,效率很低什么情况下会用到sortbuffer来排序?不能根据索引直接知道排序结果,就需要用到sortbuffer排序的执行情况?表T:id(primarykey),city(key),name,age等字段explainselectcity,name,agefromTwherecity='gz'orderbyname;--走了索引(但是是非覆盖索引),需要排序,需要进行回表查询--Usingindexcon
需求查询城市是“上海”的所有用户名,并按用户名排序,返回前1000人的名字、年龄。先看建表语句:Easy!SQL随手一写:为避免全表扫描,给city字段加个索引,再explain验证:explainselectcity,name,agefromcitizenwherecity='上海'orderbynamelimit1000;+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+----------------------------
需求查询城市是“上海”的所有用户名,并按用户名排序,返回前1000人的名字、年龄。先看建表语句:Easy!SQL随手一写:为避免全表扫描,给city字段加个索引,再explain验证:explainselectcity,name,agefromcitizenwherecity='上海'orderbynamelimit1000;+----+-------------+---------+------------+------+---------------+------+---------+------+------+----------+----------------------------