当前位置: 首页 > news >正文

11.索引_创建不同种类索引(primary+unique+复合....)

索引Index

文章目录

  • 索引`Index`
    • 一、 索引简介
      • 1.定义
      • 2.索引分类
      • 2、索引优缺点
      • 3.索引关键字的选取原则
    • 二、创建索引
      • -(创建不同种类索引,删除)
      • -索引失效

一、 索引简介

官网

1.定义

索引是将关键字数据以某种数据结构的方式存储到外存,用于提升数据的检索性能;索引既有逻辑上的概念,更是一种物理存储方式,且事实存在、需要耗费一定的储存空间。 经常使用表中的某一列或某几列为条件进行查询,数据量比较大时,可以创建索引,以提高查询的速度。

好比一本书的目录,通过目录快速查询

2.索引分类

类别详情
按数据结构分类B+tree索引、Hash索引、Full-text索引
按物理存储分类聚集索引、非聚集索引(也叫二级索引、辅助索引)
按字段特性分类主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)、全文索引(FULLTEXT)
按字段个数分类单列索引、联合索引(也叫复合索引、组合索引)

2、索引优缺点

  1. 优点:

    • 大大加快数据的检索速度(大大减少检索的数据量)-------创建索引的最主要因素

      加快数据查询

    • 通过建立唯一索引,保证数据的唯一性

      建立唯一索引,体现数据完整性

    • 帮助服务器避免排序和临时表

    • 随机I/O变成顺序I/O

    • 可以加速表和表质检的连接,特别是实现数据完整性方面特别有意义

      体现数据的完整性

  2. 缺点:

    • 创建索引和维护索引需要很多时间,这种时间随着数据量的增加而增加。

    • 如果一个数据建立了索引,那么增删改这个数据,相应的索引也要进行动态修改,这将大大降低sql的执行效率。

      套层修改

    • 需要占用物理存储空间:索引需要使用物理文件存储,会耗费一定空间。

      占用物理存储空间

3.索引关键字的选取原则

  • 表的某个字段值离散度越高,该字段越适合选作索引的关键字。

  • 占用储存空间少的字段更适合选作索引的关键字。

  • 较频繁地作为where查询条件的字段应该创建索引,分组字段或者排序字段应该创建索引,两个表的连接字段应该创建索引。

  • 更新频繁的字段不适合创建索引,不会出现在where子句中的字段不应该创建索引。

    字段修改频繁不适合建立索引

  • 最左前缀原则

  • 尽量使用前缀索引

二、创建索引

-(创建不同种类索引,删除)

-- 查看索引
SHOW KEYS FROM table_name;
-- 删除索引,2种方式:
DROP INDEX index_name ON table_name;
alter table tb_name drop index 索引名;
-- 1. 普通索引(单列索引)
-- 单列索引是最基本的索引,它没有任何限制。 **直接创建索引**,添加索引三种方式:
CREATE INDEX index_name ON table_name(col_name);#create创建索引
ALTER TABLE table_name ADD INDEX index_name(col_name);#修改表时添加index
CREATE TABLE `student` (`id` int(11) NOT NULL AUTO_INCREMENT ,`name` varchar(20)  NOT NULL ,PRIMARY KEY (`id`),INDEX index_name (name)
)#创建表时添加index
-- 2.复合索引:
-- 多个字段上创建的索引,复合索引遵守“最左前缀”原则,查询条件中使用了复合索引的第一个字段,索引才会被使用
create index index_name on table_name(col_name1,col_name2,...);
-- 3.唯一索引UNIQUE(主键默认有索引)
-- 列的值必须唯一,但允许存在空值
CREATE UNIQUE INDEX index_name ON table_name(col_name);
ALTER TABLE table_name ADD UNIQUE index index_name(col_name,...);
-- 4.主键索引
-- 唯一索引,一个表只能有一个主键,不允许有空值
CREATE TABLE `news` (`id` int(11) NOT NULL AUTO_INCREMENT ,`title` varchar(255)  NOT NULL ,`content` varchar(255)  NULL ,`time` varchar(20) NULL DEFAULT NULL ,PRIMARY KEY (`id`)
)
alter table tbl_name add primary key(col_name);
-- 通过主键约束自动添加的主键索引不能用DROP INDEX语句删除,但通过唯一约束自动创建的唯一索引可以这么删除,但是删除后唯一约束也被删除了

-索引失效

  • 在where后使用or,导致索引失效(尽量少用or)
  • 使用like ,like查询是以%开头
  • 复合索引遵守“最左前缀”原则,即在查询条件中使用了复合索引的第一个字段,索引才会被使用
  • 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  • 使用in导致索引失效
  • DATE_FORMAT()格式化时间,格式化后的时间再去比较,可能会导致索引失效。
    段,索引才会被使用
  • 如果列类型是字符串,那一定要在条件中将数据使用引号引用起来,否则不使用索引
  • 使用in导致索引失效
  • DATE_FORMAT()格式化时间,格式化后的时间再去比较,可能会导致索引失效。
  • 对于order by、group by 、 union、 distinc 中的字段出现在where条件中时,才会利用索引!

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spring MVC深入理解之源码实现
  • .net core Redis 使用有序集合实现延迟队列
  • 【环境准备】 Vue环境搭建
  • AngularJS API 深入解析
  • CTF php RCE (一)
  • 激光干涉仪可以完成哪些测量:全面应用解析
  • 北京大学长安汽车发布毫米波与相机融合模型RCBEVDet:最快能达到每秒28帧
  • 招投标信息采集系统:让您的企业始终站在行业前沿
  • 短链接day3
  • Socket网络通信流程
  • 昇思25天学习打卡营第6天|函数式自动微分
  • Docker安装遇到问题:curl: (7) Failed to connect to download.docker.com port 443: 拒绝连接
  • Nacos2.X 配置中心源码分析:客户端如何拉取配置、服务端配置发布客户端监听机制
  • Sql 导入到 Excel 工具
  • OpenFWI代码
  • 【399天】跃迁之路——程序员高效学习方法论探索系列(实验阶段156-2018.03.11)...
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • Android单元测试 - 几个重要问题
  • angular学习第一篇-----环境搭建
  • Java 11 发布计划来了,已确定 3个 新特性!!
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • supervisor 永不挂掉的进程 安装以及使用
  • Swift 中的尾递归和蹦床
  • Vue 重置组件到初始状态
  • Wamp集成环境 添加PHP的新版本
  • 关于for循环的简单归纳
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 使用前端开发工具包WijmoJS - 创建自定义DropDownTree控件(包含源代码)
  • 微信小程序--------语音识别(前端自己也能玩)
  • 限制Java线程池运行线程以及等待线程数量的策略
  • 新版博客前端前瞻
  • 怎样选择前端框架
  • ​学习笔记——动态路由——IS-IS中间系统到中间系统(报文/TLV)​
  • ###C语言程序设计-----C语言学习(3)#
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (二)hibernate配置管理
  • (附源码)springboot优课在线教学系统 毕业设计 081251
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (回溯) LeetCode 46. 全排列
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (一)搭建springboot+vue前后端分离项目--前端vue搭建
  • (原創) 物件導向與老子思想 (OO)
  • (转)winform之ListView
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • ..回顾17,展望18
  • .chm格式文件如何阅读
  • .NET Core 控制台程序读 appsettings.json 、注依赖、配日志、设 IOptions
  • .NET Framework 和 .NET Core 在默认情况下垃圾回收(GC)机制的不同(局部变量部分)
  • .NET MVC之AOP
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .Net多线程Threading相关详解
  • .net反混淆脱壳工具de4dot的使用