From 47badb6e7a20b5e060be53f1e5a2c3d5dcbe0754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?09=E9=99=88=E7=83=BD=E6=9D=B0sql=E8=BF=9B=E9=98=B6?= <3241892760@qq.com> Date: Wed, 14 Sep 2022 22:52:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...2\345\274\225.\345\210\206\351\241\265.md" | 129 ++++++++++++++++++ 1 file changed, 129 insertions(+) create mode 100644 "09\351\231\210\347\203\275\346\235\260/\347\254\224\350\256\260/9.14\347\264\242\345\274\225.\345\210\206\351\241\265.md" diff --git "a/09\351\231\210\347\203\275\346\235\260/\347\254\224\350\256\260/9.14\347\264\242\345\274\225.\345\210\206\351\241\265.md" "b/09\351\231\210\347\203\275\346\235\260/\347\254\224\350\256\260/9.14\347\264\242\345\274\225.\345\210\206\351\241\265.md" new file mode 100644 index 0000000..ecba762 --- /dev/null +++ "b/09\351\231\210\347\203\275\346\235\260/\347\254\224\350\256\260/9.14\347\264\242\345\274\225.\345\210\206\351\241\265.md" @@ -0,0 +1,129 @@ +## 索引 + +索引的作用 + +- 提高查询速度 +- 保证数据记录的唯一性 +- 查询优化靠索引起作用 +- 提高order by, group by 执行速度 + +## 索引分类 + +**索引主要分为两类**: + +- **聚集索引(clustered)**:根据数据行的键值在表或视图中的排序存储这些数据行,每个表只有一个聚集索引。聚集索引是一种对磁盘上实际数据重新组织以按指定的一列或多列值排序(类似字典中的拼音索引)(物理存储顺序)。 +- **非聚集索引 (nonclusterted)**:具有独立于数据行的结构,包含非聚集索引键值,且每个键值项都有指向包含该键值的数据行的指针。(类似字典中的偏旁部首索引)(逻辑存储顺序)。 + +## 索引的创建与使用 + +- 索引的创建 + +``` +create index 索引名 on 表名(字段) +``` + +- 索引的使用 + +``` +select * from 表名 with (index=索引名) where ... +``` + +- 索引的删除 + +``` +drop index 索引名 on 表名 +``` + + + + + +# 分页 + +格式: + +limit[位置偏移量],行数 + +在 SQL Server 和Access ,需要使用TOP 关键字 比如: + +``` +select top 5 name , hp_max from heros order by hp_max desc +``` + +##### 1.1:MySQL使用limit实现数据的分页显示 + +需求1:每页显示20条记录,此时显示第一页 + +``` +select employee_id,last_name +from employess +limit 0,20; +``` + +需求2:每页显示20条记录,此时显示第二页 + +``` +select employee_id,last_name +from employess +limit 20,20; +``` + +需求3:每页显示20条记录,此时显示第3页 + +``` +select employee_id,last_name +from employess +limit 40,20; +``` + +需求: 每页显示PageSize条记录,此时显示第PageNo页 + +公式 :(limit PageNo-1) * PageSize, PageSize; + +##### 2.1:where ... order by ...limit 声明顺序如下 + +limit 的格式:严格来说:limit位置偏移量,条目数 + +结构“ limit 0,条目数” 等价于“limit条目数” + +``` +显示第一页20条数据 +select employee_id,last_name,salary +from employess +where salary>6000 +order by salary desc +limit 0,20; + +#limit 20; +``` + +需求4:表里有107条数据,我们只想要显示第32、33条数据怎么办 + +``` +select employee_id,last_name,salary +from employess +limit 31,2; +``` + +###### 2.3 MYSQL8.0中可以用“limit 3 offset 4” ,意思是获取从第5条记录开始后面的3条记录,和“limit 4,3;”返回的结果相同 + +分页显示公式 : (当前页数-1)* 每条页数,每页条数 + +- 注意: limit子句必须放在整个select语句的最后 + +``` +select employee_id,last_name,salary +from employess +limit 2 offset 31; +``` + +练习:查询员工表中工资最高的员工信息 + +``` +select employee_id,last_name,salary +from employess +order by salary desc +limit 0,1; +#limit 1; +#limit 1 offset 0; +``` -- Gitee