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条件中时,才会利用索引!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43627.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

互助学习平台小程序的设计

管理员账户功能包括:系统首页,个人中心,学生管理,课程信息管理,课程分类管理,课程评价管理,学习计划管理,留言板管理 微信端账号功能包括:系统首页,课程信息…

Databend 开源周报第 152 期

Databend 是一款现代云数仓。专为弹性和高效设计,为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务:https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展,遇到更贴近你心意的 Databend。 支持内置 UDFs …

数学建模美赛入门

数学建模需要的学科知识 高等数学线性代数 有很多算法的掌握是需要高等数学和线代的相关知识 如:灰色预测模型需要微积分知识;神经网络需要用到导数知识;图论和层次分析法等都需要用到矩阵计算的相关知识等; 概率论与数理统计&am…

忘记Apple ID密码怎么退出苹果ID账号?

忘记Apple ID密码怎么退出账号?Apple ID对每个苹果用户来说都是必不可少的,没有它,用户就不能享受iCloud、App Store、iTunes等服务。苹果手机软件下载、丢失解锁、恢复出厂设置等都需要使用Apple ID。如果忘记Apple ID 密码,这会…

Flutter 开启混淆打包apk,并反编译apk确认源码是否被混淆

第一步:开启混淆并打包apk flutter build apk --obfuscate --split-debug-info./out/android/app.android-arm64.symbols 第二步:从dex2jar download | SourceForge.net 官网下载dex2jar 下载完终端进入该文件夹,然后运行以下命令就会在该…

分享五款软件,成为高效生活的好助手

​ 给大家分享一些优秀的软件工具,是一件让人很愉悦的事情,今天继续带来5款优质软件。 1.图片放大——Bigjpg ​ Bigjpg是一款图片放大软件,采用先进的AI算法,能够在不损失图片质量的前提下,将低分辨率图片放大至所需尺寸。无论…

Windows10 企业版 LTSC 2021发布:一键点击获取!

Windows10企业版 LTSC 2021是微软发布的长达5年技术支持的Win10稳定版本,追求稳定的企业或者个人特别适合安装该系统版本。该版本离线制作而成,安全性高,兼容性出色,适合新老机型安装,力求带给用户更稳定、高效的操作系…

兼容性问题---H5屏幕适配方案

对前端计量单位的理解:px、vw、rem、em、%等; https://www.tiangong.cn/chatShare?share_ide3a157fe37e041de95a2 前端开发中常见的计量单位主要包括以下几种:px (像素): 屏幕显示的最小单位,一个像素表示显示器上一个点的颜色。…

【第24章】MyBatis-Plus之SQL注入器

文章目录 前言一、概述1. 使用场景2. 功能 二、注入器配置三、自定义全局方法攻略1. 定义SQL2. 注册自定义方法3.定义BaseMapper4.配置SqlInjector 四、注意事项五、更多示例六、实战1. 定义SQL2. 注册自定义方法3.定义BaseMapper4.配置SqlInjector5. 测试类6. 结果 总结 前言 …

QT调节屏幕亮度

1、目标 利用QT实现调节屏幕亮度功能:在无屏幕无触控时,将屏幕亮度调低,若有触控则调到最亮。 2、调节亮度命令 目标装置使用嵌入式Linux系统,调节屏幕亮度的指令为: echo x > /sys/class/backlight/backlight/…

Linux开机自启动连接wifi

🌈个人主页:Rookie Maker 🔥 系列专栏:Linux 🏆🏆关注博主,随时获取更多关于IT的优质内容!🏆🏆 😀欢迎来到我的代码世界~ 😁 喜欢的…

【技术支持】npm镜像设置

临时设置 npm install <package> --registryhttps://registry.npmmirror.com/永久设置 npm config set registry https://registry.npmmirror.com/获取设置值 npm config get registry退回官方 npm config set registry https://registry.npmjs.org/

P8306 【模板】字典树

题目描述 给定 n 个模式串 s1​,s2​,…,sn​ 和 q 次询问&#xff0c;每次询问给定一个文本串 ti​&#xff0c;请回答 s1​∼sn​ 中有多少个字符串 sj​ 满足 ti​ 是 sj​ 的前缀。 一个字符串 t 是 s 的前缀当且仅当从 s 的末尾删去若干个&#xff08;可以为 0 个&#…

Kubernetes管理神器-插件管理器Krew

Kubernetes管理神器-插件管理器Krew Krew是Kubernetes的一个插件管理器&#xff0c;它允许用户搜索、安装和管理kubectl插件。通过Krew&#xff0c;用户可以方便地扩展kubectl的功能&#xff0c;使用社区提供的各种插件。 类似于apt,dnf,brew等工具&#xff0c;截至目前&…

环境快照:精通Conda中的conda env export命令

环境快照&#xff1a;精通Conda中的conda env export命令 引言 在科学计算和软件开发中&#xff0c;能够准确地复制和共享工作环境是至关重要的。Conda提供了conda env export命令&#xff0c;允许用户导出当前环境的配置&#xff0c;包括已安装的包及其版本。这使得环境的复…

2.贪心算法.基础

2.贪心算法.基础 基础知识题目1.分发饼干2.摆动序列3.最大子序和4.买股票的最佳时机24.2.买股票的最佳时机5.跳跃游戏5.1.跳跃游戏26.K次取反后最大化的数组和7.加油站8.分发糖果 基础知识 什么是贪心? 贪心的本质是选择每一阶段的局部最优&#xff0c;从而达到全局最优。 贪…

【代码随想录算法训练Day63】最小生成树算法

Day63 图论第七天 prim算法 #include<iostream> #include<vector> #include <climits>using namespace std; int main() {int v, e;int x, y, k;cin >> v >> e;// 填一个默认最大值&#xff0c;题目描述val最大为10000vector<vector<int…

面试经典 106. 从中序与后序遍历序列构造二叉树

最近小胖开始找工作了&#xff0c;又来刷苦逼的算法了 555 废话不多说&#xff0c;看这一题&#xff0c;上链接&#xff1a;https://leetcode.cn/problems/construct-binary-tree-from-inorder-and-postorder-traversal/description/?envTypestudy-plan-v2&envIdtop-inte…

Linux-磁盘空间不足的清理步骤(详细版本)

当 Linux 服务器出现 “no space left on device” 错误时,意味着磁盘空间已满,需要采取一些措施来清理磁盘,可以根据下面步骤依次清理: 1. 检查磁盘使用情况 首先,使用 df 和 du 命令检查磁盘使用情况,找出哪些目录占用了大量空间。 可以通过如下命令来查询 df -h举例…

将ceph中的submodule转化为正常文件提交到内部仓库中

将ceph中的submodule转化为正常文件提交到内部仓库中 1、问题 ceph 的submodule经常下载不下来导致编译打包都困难&#xff0c;如果有一个方法将submodule下载下来然后直接放到仓库中&#xff0c;以免每次都需要重新clone了。这时发现另外一个问题&#xff0c;submodule没有被…