mysql-order by原理

测试数据创建

1.新建表

CREATE TABLE `user_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键ID',
  `city` varchar(16) NOT NULL COMMENT '城市',
  `name` varchar(16) NOT NULL COMMENT '姓名',
  `age` int(11) NOT NULL COMMENT '年龄',
  `addr` varchar(128) DEFAULT NULL COMMENT '地址',
  PRIMARY KEY (`id`),
  KEY `city` (`city`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

2.刷测试数据存储过程新建

-- 声明存储过程
DELIMITER //
CREATE PROCEDURE callback()
begin
  declare num int;
  set num = 1;
  LOOP_LABLE :
  loop
    INSERT INTO user_info(id,city,`name`,age,addr) 
    VALUES(num,CONCAT("成都", num),CONCAT("小李", num),CONCAT(num),CONCAT("高新区",num));
    set num = num + 1;
    if num >= 100000
    then leave LOOP_LABLE;
    end if;
  end loop;
end;

3.执行存储过程

CALL callback();

4.删除存储过程

drop procedure IF EXISTS callback;

5.再重新创建存储过程并执行

CREATE PROCEDURE callback()
begin
  declare num int;
  set num = 100000;
  LOOP_LABLE :
  loop
    INSERT INTO user_info(id,city,`name`,age,addr) 
    VALUES(num,"广州",CONCAT("小李", num),CONCAT(num),CONCAT("高新区",num));
    set num = num + 1;
    if num >= 200000
    then leave LOOP_LABLE;
    end if;
  end loop;
end;

两种排序算法

全字段排序

我们在工作中常常使用这一的写法

select * from user_info i
where i.city='成都1'
order by age desc limit 400,100

对应执行计划执行计划各个列解读可以参考跳转

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章