MYSQL介绍——排序分页与索引

数据排序的好处

  • 一旦数据排序之后,查找的速度就会翻倍,现实世界和程序世界都是如此

如何创建索引

  1. 创建数据表时就添加
    在这里插入图片描述
    给出示例:

CREATE TABLE t_message (
	id INT UNSIGNED PRIMARY KEY,
	content VARCHAR ( 200 ) NOT NULL,
	type ENUM ( "公告", "通报", "个人通知" ) NOT NULL,
	create_time TIMESTAMP NOT NULL,
INDEX idx_type ( type ) 
);

如何添加和删除索引

在这里插入图片描述
给出示例:

DROP INDEX idx_type ON t_message;

CREATE INDEX idx_type ON t_message(type);

SHOW INDEX FROM t_message;

ALTER TABLE t_message ADD INDEX idx_type(type) ;

索引的使用原则

  • 数据量很大,经常被查询的数据表可以设置索引
  • 索引只添加在经常用作检索条件的字段上面
  • 不要在大字段上创建索引

数据操作语言—简单查询

最基本的查询是由SELECT 关键字和 FROM 关键字构成的,
SELECT语句屏蔽了物理层的操作,用户不必关心数据的真
实存储,交由数据库高效的查找数据

给出一个示例语句:


select * from t_emp;

select empno,job from t_emp;

SELECT empno,sal * 12 "income" FROM t_emp;
 如上最后一条sql语句所示,当sql语句中出现了表达式的时候,这一列的名字就默认为表达式,因此就需要一种对列名重命名的机制,此时我们可以使用 列名 AS 别名 或者是 列名 别名的方式重命名。
 需要注意的是,重命名只会在展示的时候使用,不会影响原本数据。

查询语句的执行顺序

我们需要了解sql的执行原理,首先它是会进行词法分析以及词法的优化,读取到SQL语句后因为FROM 优先级高于 SELECT ,所以会先选择数据来源,在选择输出内容。
在这里插入图片描述

数据分页

比如我们查看朋友圈,只会加载少量部分信息,不用一次性加载全部朋友圈,那样只会浪费CPU时间、内存和网络带宽
如果结果集的记录很多,则可以使用LIMIT关键字限定结果集数量。

LIMIT关键字语法如下:

SELECT …… FROM …… LIMIT 起始位置 , 偏移量 ;

给出一个示例代码:

SELECT empno,sal * 12 "income" FROM t_emp limit 0,10;

另外limit语句有简写方式,如果LIMIT子句只有一个参数,它表示的是偏移量,起始值默认为0。
例如:

SELECT empno,sal * 12 "income" FROM t_emp limit 10;

执行顺序:
在这里插入图片描述

数据排序

如果不设置,那么查询的结果集是不会有排序的,如果我们想要对数据进行排序,就必须使用 ORDER BY 字句。

SELECT …… FROM …… ORDER BY 列名 [ ASC | DESC ] ;

给出一个示例:

select * from t_emp order by sal desc;

排序关键字

ASC表示升序排列(默认升序),DESC表示降序排列。
如果排序列是数字类型,数据库就按照数字大小排序,如果是日期
类型就按照日期大小排序,如果是字符串就按照字符集序号排序。

此时我们会有一个问题,就是如果按照升序或者降序排序,那么排序字段值相同的情况下,又该怎么排序呢,数据库针对这种排序字段值相同的情况,Mysql会按照主键值的大小来排序两条数据。

多字段排序

同时,Mysql支持多个字段排序,我们可以使用ORDER BY规定首要排序条件和次要排序条件。数据库会先按照首要排序条件排序,如果遇到首要排序内容相同的记录,那么就会启用次要排序条件接着排序。
例如:下列sql会按照部门升序情况排序,当部门值相同时按照工资降序排序。

select deptno,sal from t_emp order by  deptno asc,sal desc;

效果如图:
在这里插入图片描述

排序加分页

此时我们可以结合排序以及分页得到指定数据,例如查询工资最高的5个人的数据,例如:

select * from t_emp order by sal limit 5;

结果如图所示:

在这里插入图片描述
在这里插入图片描述

去除重复记录

mysql中去除重复记录使用DISTINCT关键字实现,例如我想要查询员工表中的职位信息,当未取除重复数据时,结果如下:
在这里插入图片描述
,而我们需要去除时可以使用以下语句:

select DISTINCT job from t_emp ;

效果如下:
在这里插入图片描述

注意事项

使用DISTINCT的SELECT子句中只能查询一列数据,如果查询多列,
去除重复记录就会失效。
例如,我执行下面这个语句时

select DISTINCT job,ename from t_emp ;

效果如下,可以看到job字段并没有去重,其实这个是因为它将job和ename两个字段组装后去重了
在这里插入图片描述
另外,DISTINCT字段在sql字句中只能使用一次,类似于下面的语句都是错误的

select DISTINCT job, DISTINCT ename from t_emp ;

select  job, DISTINCT ename from t_emp ;

猜你喜欢

转载自blog.csdn.net/HBUT_WANGWEI/article/details/127096007