【MySQL学习笔记】(十)使用索引的操作

简单使用索引

  • 创建索引
    • 创建主键索引
    • 创建唯一键索引
    • 普通索引的创建
  • 查询索引
  • 删除索引
  • 索引创建原则

数据库中的索引与书籍中的索引类似,在一本书中,利用索引可以快速地查找所需信息,
而无须阅读整本书。在数据库中,索引使数据库程序无须对整个表进行扫描,就可以在其中找
到所需数据。书中的索引是一个词语列表,其中注明了包含各个词的页码。而数据库中的索引
是某个表中一列或者若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针
清单。索引的作用如下。
(1)通过创建唯一索引,可以保证数据记录的唯一 性。
(2)可以大大加快数据的检索速度。
(3)可以加速表与表之间的连接,这一点在实现数据的参照完整性方面有特别的意义。
(4)在使用ORDER BY和GROUP BY子句中进行检索数据时,可以显著减少查询中分组
和排序的时间。
(5)使用索引可以在检索数据的过程中使用优化隐藏器,提高系统性能。
索引分为聚集索引和非聚集索引。聚集索引是指索引表中索引项的顺序与表中记录的物理
顺序一致的索引。

注意:MySQL中不同的存储引擎使用不用的索引类型,如使用B+tree,Hash和Full-text等进行高效的查询,本篇文章只关心其语法上的操作,不过多讨论内部实现细节。
在这里插入图片描述

创建索引

创建主键索引

  • 第一种方式
-- 在创建表的时候,直接在字段名后指定 primary keycreate table user1(id int primary key, name varchar(30));
  • 第二种方式
-- 在创建表的最后,指定某列或某几列为主键索引create table user2(id int, name varchar(30), primary key(id));
  • 第三种方式
create table user3(id int, name varchar(30));-- 创建表以后再添加主键alter table user3 add primary key(id);

查询一下是否存在索引

mysql> show index from user1\G;
*************************** 1. row ***************************Table: user1 //表名Non_unique: 0 //唯一索引Key_name: PRIMARY // 主键索引Seq_in_index: 1Column_name: id //索引在哪列Collation: ACardinality: 0Sub_part: NULLPacked: NULLNull: Index_type: BTREE //这里是以二叉树形式的索引,具体内部形式是B+树,这里不做过多介绍Comment: 
Index_comment: 
1 row in set (0.00 sec)

主键索引的特点:

  • 一个表中,最多有一个主键索引,当然可以使用复合主键
  • 主键索引的效率高(主键不可重复)
  • 创建主键索引的列,它的值不能为null,且不能重复
  • 主键索引的列基本上是int

创建唯一键索引

  • 第一种方式
    – 在表定义时,在某列后直接指定unique唯一属性。
create table user4(id int, name varchar(30) unique);
  • 第二种方式
-- 创建表时,在表的后面指定某列或某几列为uniquecreate table user5(id int, name varchar(30), unique(name));
  • 第三种方式
--创建一张表后再添加索引
alter table user4 add unique(id);

唯一索引的特点:

  • 一个表中,可以有多个唯一索引
  • 查询效率高
  • 如果在某一列建立唯一索引,必须保证这列不能有重复数据
  • 如果一个唯一索引上指定not null,等价于主键索引

普通索引的创建

  • 第一种方式
create table user8(id int primary key,name varchar(20),email varchar(30),index(name) --在表的定义最后,指定某列为索引
);
  • 第二种方式
create table user9(id int primary key, name varchar(20), email 
varchar(30));alter table user9 add index(name); --创建完表以后指定某列为普通索引
  • 第三种方式
create table user10(id int primary key, name varchar(20), email varchar(30));-- 创建一个索引名为 idx_name 的索引 create index idx_name on user10(name);

普通索引的特点:

  • 一个表中可以有多个普通索引,普通索引在实际开发中用的比较多
  • 如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

查询索引

  • 第一种方法: show keys from 表名
  • 第二种方法: show index from 表名;
  • 第三种方法(信息比较简略的情况): desc 表名;

删除索引

  • 第一种方法-删除主键索引: alter table 表名 drop primary key;

  • 第二种方法-其他索引的删除: alter table 表名 drop index 索引名; 索引名就是show keys
    from 表名中的 Key_name 字段

mysql> alter table user10 drop index idx_name;

  • 第三种方法方法: drop index 索引名 on 表名

索引创建原则

  • 比较频繁作为查询条件的字段应该创建索引
  • 唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
  • 更新非常频繁的字段不适合作创建索引
  • 不会出现在where子句中的字段不该创建索引

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

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

相关文章

伯俊ERP与金蝶云星空对接集成表头表体组合查询连通分布式调出单新增(调拨出库对接分布式调出(KD调拨)6月)

伯俊ERP与金蝶云星空对接集成表头表体组合查询连通分布式调出单新增(调拨出库对接分布式调出(KD调拨)6月) 对接系统:伯俊ERP 伯俊科技,依托在企业信息化建设方面的领先技术与实践积累,致力于帮助企业实现全渠道一盘货。…

Git常用命令用法

参考视频:真的是全能保姆 git、github 保姆级教程入门,工作和协作必备技术,github提交pr - pull request_哔哩哔哩_bilibili 1.Git初始化 首先设置名称和邮箱。然后初始化一下,然后就创建了一个空的Git仓库。 PS D:\golang\oth…

【Linux】地址空间概念

目录 前言: 地址空间回顾 验证:一个变量是否会有两个值? 一. 什么是地址空间 虚拟地址与物理地址之间的关系 二. 地址空间是如何设计的 1. 回答一个变量两个值 2.扩展 继续深入理解 三. 为什么要有地址空间 原因: 1. 使…

【探索Linux】—— 强大的命令行工具 P.7(进程 · 进程的概念)

阅读导航 前言一、冯诺依曼体系结构二、操作系统(OS)1. 概念 三、进程1. 进程的概念2. PCB(Process Control Block)3. 查看进程 四、fork函数1. 函数简介2. 调用方式3. 返回值4. 使用示例 五、进程的几种状态1. 状态简介2. 进程状…

react中使用cytoscape

1. 安装 cytoscape npm install cytoscape 2. 使用 import React, { useEffect, useRef, useState } from "react"; import cytoscape from "cytoscape";const peopleList [{"data": {"id": "1","label": &qu…

三步搭建个人网站并发布上线【内网穿透】

三步搭建个人网站并发布上线【内网穿透】 文章目录 三步搭建个人网站并发布上线【内网穿透】前言一、在本地电脑上制作一个网站二、使用WordPress建立网站三、通过cpolar建立的数据隧道发布到公网上 前言 在这个个性飞扬的时代,每个人都希望拥有表现自我的平台&…

git快速使用

1、下载git 设置签名 2、基本概念 工作区:写代码的地方。 暂存区:.git的.index 工作区:.git 3、常用操作 本地codinggit init, 初始化一个本地仓库,项目根目录下会出现个.gitgit remote add origin gitgithub.com…

Git的基本使用笔记——狂神说

版本控制 版本迭代, 版本控制( Revision control)是一种在开发的过程中用于管理我们对文件、目录或工程等内容的修改历史,方便查看更改历史记录,备份以便恢复以前的版本的软件工程技术。 实现跨区域多人协同开发 追踪和记载一个或者多个文件的…

网络类型+二层封装技术

一、网络类型分类 1、点到点网络 在一个网段中,只能部署两个节点(两个IP),如GRE环境就属于虚拟的点到点网络类型,通常是串线连接。 如下图当前只存在两个节点,但并不是点到点,因为它中间网段…

SAP message-06 027 供应商 还未为采购组织 创建

目录 错误信息 一、错误原因 二、修正 错误信息 When creating a RFQ in ME41 for a vendor that is not assigned to the Purchasing Organization, error "Vendor & has not been created for purch. organization" is not raised. Supplier AEQI1 has not be…

css之层叠上下文

之前调元素的显示优先级时,只会默默的调z-index以达到效果,但有时不生效,又不知道根因。刚好详细了解到层叠上下文,可以解释此类问题。 什么是层叠上下文? 在CSS2.1规范中,每个盒模型的位置是三维的&…

SpringMVC_SSM整合

一、回顾SpringMVC访问接口流程 1.容器加载分析 容器分析 手动注册WebApplicationContext public class ServletConfig extends AbstractDispatcherServletInitializer {Overrideprotected WebApplicationContext createServletApplicationContext() {//获取SpringMVC容器An…

Spark 6:Spark SQL DataFrame

SparkSQL 是Spark的一个模块, 用于处理海量结构化数据。 SparkSQL是用于处理大规模结构化数据的计算引擎 SparkSQL在企业中广泛使用,并性能极好 SparkSQL:使用简单、API统一、兼容HIVE、支持标准化JDBC和ODBC连接 SparkSQL 2014年正式发布,当…

使用webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

1、前言 在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还会遇到跨操作系统进行测试的时候&…

LeetCode(力扣)17. 电话号码的字母组合Python

LeetCode17. 电话号码的字母组合 题目链接代码 题目链接 https://leetcode.cn/problems/letter-combinations-of-a-phone-number/ 代码 class Solution:def __init__(self):self.letterMap ["", # 0"", # 1"abc", # 2"def&qu…

aop中获取@PathVariable参数

1.controller中的声明 2.aop中获取 RequestAttributes attributes RequestContextHolder.getRequestAttributes(); ServletRequestAttributes servletRequestAttributes (ServletRequestAttributes)attributes; HttpServletRequest request servletRequestAttributes.getReq…

深圳-海岸城购物中心数据分析

做数据分析的时候,如果要对商场进行分析,可以从这些数据纬度进行分析,如下图所示: 截图来源于数位观察:https://www.swguancha.com/

【Linux】进程基础概念【下篇】

目录 1. 基本概念 2. 常见环境变量 常见环境变量指令 (1. PATH (2. HOME (3. SHELL 3.环境变量的组织形式 (1)通过代码如何获取环境变量 (2)普通变量与环境变量的区别 (3&…

C# winform控件和对象双向数据绑定

实现目的: 控件和对象双向数据绑定 实现结果: 1. 对象值 -> 控件值 2. 控件值 -> 对象值 using System; using System.Windows.Forms;namespace ControlDataBind {public partial class MainForm : Form{People people new People();public Mai…

微信小程序 选择学期控件 自定义datePicker组件 不复杂

我的时间选择组件在common文件夹里 datePicker组件代码 html: <view class"date_bg_view"> </view> <view class"date_content"><view class"date_title"><image src"/image/icon_close_black.png" clas…