本文为《MySQL归纳学习》专栏的第三篇文章,同时也是关于《MySQL查询》知识点的第三篇文章。
往期回顾:
MySQL玩转指南:探秘Server层组件及权限校验实践
MySQL战记:Count( *)实现之谜与计数策略的选择
在MySQL世界中,排序是一个常见而重要的操作。但你是否了解MySQL内部排序的神奇算法?本文将带你深入了解order by语句的几种算法流程,重点详解全字段排序和rowid排序,并对它们的适用场景进行对比分析。
首先来看一下这张思维导图,对本文内容有个直观的认识。
接下来进入正文。
假设有如下表结构:
CREATE TABLE t (
id int(11) NOT NULL,
city varchar(16) NOT NULL,
name varchar(16) NOT NULL,
age int(11) NOT NULL,
addr varchar(128) DEFAULT NULL,
PRIMARY KEY (id),
KEY city (city)
) ENGINE=InnoDB;
使用存储过程来初始化数据:
DELIMITER ;;
CREATE PROCEDURE init_t()
BEGIN
DECLARE i INT DEFAULT 0;
DECLARE j INT DEFAULT 0;
DECLARE k INT DEFAULT 0;
DECLARE city_list VARCHAR(200) DEFAULT '杭州,上海,武汉,北京';
DECLARE name_len INT DEFAULT 0;
DECLARE city VARCHAR(16);
DECLARE namef VARCHAR(16);
DECLARE age INT;
DECLARE addr VARCHAR(128);
SET name_len = LENGTH('abcdefghijklmnopqrstuvwxyz');
-- 第一层循环:按照city遍历
loop_city: LOOP
SET i = i + 1;
SET city = SUBSTRING_INDEX(SUBSTRING_INDEX(city_list, ',', i), ',', -1); -- 获取城市
-- 第二层循环:生成数据
while(k