MySQL~索引

news2024/12/27 19:37:30

7、索引

MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构。

提取句子主干,就可以得到索引的本质:索引是数据结构。

7.1、索引的分类

在一个表中,主键索引只能有一个,唯一索引可以有多个

  • 主键索引(PRIMARY KEY)
    • 唯一的标识,主键不可重复,只能有一个列作为主键
  • 唯一索引(UNIQUE KEY)
    • 避免重复的列出现,唯一索引可以重复,多个列都可以标识位 唯一索引
  • 常规索引(KEY/INDEX)
    • 默认的,index\key 关键字来设置
  • 全文索引(FullText)
    • 在特定的数据库引擎下才有,MyISAM
    • 快速定位数据
-- 索引的使用
-- 1、在创建表的时候给字段增加索引
-- 2、创建完毕后,增加索引

-- 显示所有的索引信息
SHOW INDEX FROM student

-- 增加一个全文索引   索引名(列名)
ALTER TABLE `student` ADD FULLTEXT INDEX `studentname`(`studentname`);

--  EXPLAIN 分析 sql 执行的状况
EXPLAIN SELECT * FROM `student`; -- 非全文索引

EXPLAIN SELECT * FROM `student` WHERE MATCH(`studentname`) AGAINST('刘');

7.2、测试索引

DROP TABLE IF EXISTS `app_user`

CREATE TABLE `app_user` (
`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) DEFAULT'' COMMENT'用户昵称',
`email` VARCHAR(50) NOT NULL COMMENT'用户邮箱',
`phone` VARCHAR(20) DEFAULT'' COMMENT'手机号',
`gender` TINYINT(4) UNSIGNED DEFAULT '0'COMMENT '性别(0:男;1:女)',
`password` VARCHAR(100) NOT NULL COMMENT '密码',
`age` TINYINT(4) DEFAULT'0'  COMMENT '年龄',
`create_time` DATETIME DEFAULT CURRENT_TIMESTAMP,
`update_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT = 'app用户表'

-- 百万数据插入
DROP FUNCTION IF EXISTS mock_data;
-- 写函数之前必须要写,标志:$$
DELIMITER $$
CREATE FUNCTION mock_data()
RETURNS INT
-- 注意returns,否则报错。
BEGIN
DECLARE num INT DEFAULT 1000000;
-- num 作为截止数字,定义为百万,
DECLARE i INT DEFAULT 0;
WHILE i < num DO
   INSERT INTO app_user(`name`, `email`, `phone`, `gender`, `password`, `age`)
   VALUES(CONCAT('用户', i), CONCAT('100',i,'@qq.com'), CONCAT('18', FLOOR(RAND()*(999999999-100000000)+100000000)),FLOOR(RAND()*2),UUID(), FLOOR(RAND()*100));
   SET i = i + 1;
END WHILE;
RETURN i;
END;

SELECT mock_data() -- 执行此函数 生成一百万条数据

SELECT * FROM `app_user` WHERE `name` = '用户9999'; -- 总耗时      : 1.870 sec
SELECT * FROM `app_user` WHERE `name` = '用户9999'; -- 总耗时      : 2.062 sec
SELECT * FROM `app_user` WHERE `name` = '用户9999'; -- 总耗时      : 2.118 sec


EXPLAIN SELECT * FROM `app_user` WHERE `name` = '用户9999';


-- id _ 表名 _ 字段名
-- CREATE INDEX 索引名 on 表(字段)
CREATE INDEX id_app_user_name ON app_user(`name`);

SELECT * FROM `app_user` WHERE `name` = '用户9999'; -- 总耗时      : 0.001 sec

EXPLAIN SELECT * FROM `app_user` WHERE `name` = '用户9999';

在这里插入图片描述

在这里插入图片描述

索引在小数据量的时候,用处不大,但是在大数据的时候,区别十分明显~

7.3、索引原则

  • 索引不是越多越好
  • 不要对进程变动数据加索引
  • 小数据量的表不需要加索引
  • 索引一般加在常用来查询的字段上!

索引的数据结构

Hash类型的索引

Btree:InnoDB的默认数据结构~

阅读:http://blog.codinglabs.org/articles/theory-of-mysql-index.html

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

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

相关文章

微机原理与接口技术笔记(持续更新)

文章目录前言储存系统与技术材料高速储存器缓冲储存器&#xff08;Cache&#xff09;材料&#xff0c;局部性&#xff0c;访问方式Cache全相联映射Cache交换与一致性单核CPU一致性处理多核CPU的MESI协议主储存器&#xff08;内存&#xff09;主要技术指标容量带宽内存模组与内存…

机器学习100天(九):009 多项式回归理论

机器学习100天,今天讲的是:多项式回归理论! 在前两期视频我们讲解了简单线性回归理论,并解决了一个房价预测的问题,建立了一个房价与地区人口的线性关系。然而,如果数据的分布不是简单的线性关系,又该怎么做呢? 一、多项式回归 我们来看一个例子,在这个二维平面上,…

【蓝桥杯】砝码称重

3417. 砝码称重 - AcWing题库 题意&#xff1a; 思路回顾&#xff1a; 首先这道题一开始我没想用DP做&#xff0c;看到标签是入门题就没想DP qwq 其实这就是一个普通背包 一开始设计状态设计不出来&#xff0c;刚开始设的是dp[i][j]表示前i个物品能表示j种重量 显然是不行…

计算机毕业设计django基于python商品比价平台

项目介绍 随着计算机技术的发展和网络的普及。采用当前流行的B/S模式以及3层架构的设计思想通过Python技术来开发此系统的目的是建立一个配合网络环境的商品比价系统的平台,这样可以有效地解决数据商品比价系统混乱的局面。 本文首先介绍了商品比价系统的发展背景与发展现状,…

年后面试,给你提6点建议!

你好&#xff0c;我是田哥转眼年底&#xff0c;很大部分人都在观望&#xff0c;甚至已经开始着手准备明年的面试了&#xff0c;不知道屏幕前的你是如何打算的&#xff1f;从现在开始&#xff0c;到明年三月份还有两个多月的时间&#xff0c;时间不多&#xff0c;但也不少了。只…

优秀的后端应该有哪些开发习惯?

见识过各种各样的代码,优秀的、垃圾的、不堪入目的、看了想跑路的等等,所以这篇文章记录一下一个优秀的后端 Java 开发应该有哪些好的开发习惯。 拆分合理的目录结构 受传统的 MVC 模式影响,传统做法大多是几个固定的文件夹 controller、service、mapper、entity,然后无限…

CentOS7 离线部署 PostgreSQL12

CentOS7 离线部署 PostgreSQL12下载资源包部署、启动配置服务创建用户及数据库下载资源包 下载地址 https://www.postgresql.org/download/选择系统 3. 拉到最下边点击direct download 4. 选择需要的版本 5. 点击Avaliable Groups下的链接 6. 下载postgresql*、postgresql*-…

基于android的共享单车系统

效果展示&#xff1a; 需求信息&#xff1a; 客户端&#xff1a; 1&#xff1a;登录注册&#xff1a;用户可以通过自己的信息进行账号的注册 2&#xff1a;附近单车&#xff1a;显示 附近的共享单车租赁点 3&#xff1a;单车开锁&#xff1a;扫码或者输入编号开锁 4&#xff1a…

简单DP+最长上升子序列

简单DP最长上升子序列 文章目录简单DP最长上升子序列比较简单的DP[1027. 方格取数](https://www.acwing.com/problem/content/1029/)题解[275. 传纸条](https://www.acwing.com/problem/content/277/)题解最长上升子序列[AcWing1014. 登山](https://www.acwing.com/problem/con…

20.Django大型电商项目之登录页面、如何使用图片验证码

1. 登录页面 1.1 基础搭建 templates <!-- netshop\userapp\templates\userapp\login.html --> {% extends base.html %} {% block title %}用户登录页面{% endblock %}{% load static %} {% block headerjs %} <script type"text/javascript" src"…

Allegro打散Group的两种方法操作指导

Allegro打散Group的两种方法操作指导 Allegro可以建一个Group,也可以打散一个Group,当不需要器件,过孔走线等等以一个group形式体现,可以用下面的操作打散,具体操作如下 举例需要将这个Group打散 选择setup-application Mode-placement edit模式 Find选择Groups 鼠标移…

基于Geehy APM32F4移植使用letter-shell命令行终端

1. letter-shell简介 letter shell是一个C语言编写的&#xff0c;可以嵌入在程序中的嵌入式shell&#xff0c;主要面向嵌入式设备。 说得直白点他就是一个命令行交互软件&#xff0c;可以读取用户输入的命令&#xff0c;找到并执行命令对应的函数。 letter-shell的功能十分强…

C# 绘图基本方法

一得到Graphics对象 1 OnPaint事件中使用 Protected overrid void OnPaint(PaintEventArgs e) {Graphics ge.Graphics;...... }2 其他情况实现 Graphics gthis.CreaateGraphics();二 关于Graphics的释放 1 对于CreateGraphics&#xff08;&#xff09;得到的Graphics对象&a…

VC++开发一个资源编辑器-1.拖动控件

我想要做一个代码生成向导&#xff0c;首先要实现的功能 &#xff0c;是自动生成界面。 要实现以上的功能&#xff0c;第1步要实现&#xff0c;对界面上各个控件的拖动&#xff0c;移动&#xff0c;缩放的功能。 今天完成了初步的代码实现。 最要的功能实现 与备忘在这里写一…

【MQTT】mqtt 服务器部署--go 生产和消费demo

1. 背景 Golang 是谷歌开发的一种静态强类型、编译、并发和垃圾收集编程语言。围棋富有表现力&#xff0c;干净&#xff0c;高效。它的并发机制使得编写最大限度地利用多核和网络机器的程序变得容易&#xff0c;它的创新类型系统使得灵活和模块化的程序构造成为可能。Go 可以快…

【博客561】利用隧道和conntrack实现NAT网关

利用隧道和conntrack实现NAT网关 场景&#xff1a;实现一个NAT网关来转发其它node的出外网流量 如&#xff1a;图中的2节点充当NAT网关来转发1的出外网流量 利用隧道和conntrack实现NAT网关 节点ip&#xff1a; node1是172.17.158.48&#xff0c;node2是172.17.158.46 1、配…

Clipper库 | 类型和填充规则

裁剪类型(ClipType) CT_INTERSECTION 0 CT_UNION 1 CT_DIFFERENCE 2 CT_XOR 3交集&#xff0c;AND (intersection) &#xff1a;主体和裁剪多边形相交的区域。并集&#xff0c;OR (union) - 主体和裁剪多边形两者合并的区域。非/差&#xff0c;NOT (difference) - 裁剪多边…

net/http 库的客户端实现(上)

前言 Go语言标准库 net/http 是一个非常强大的标准库&#xff0c;使得构建 HTTP 请求和编写 Web 服务器的工作变得非常简单。 我们来看看是他是如何实现客户端和服务端的。 使用示例 假设本地有一个GET方法的HTTP接口&#xff0c;响应 Hello World&#xff01; 使用 net/ht…

Cesium:实时数据渲染性能优化与内存泄漏问题分析

在基于Cesium.js三维可视化开发框架,采用“轮询”策略,实现单车点位数据的实时渲染的demo示例,线上部署完毕之后,竟发现出现了“内存泄漏”的问题。思前想后,反复调试,然而并没有找到引发泄露的根源所在,最后偶然间在《JavaScript高级程序设计(第4版)》中看到了问题的答…

HashTable源码解析

HashTable源码解析 简介 HashTable 是一个古老的&#xff08;JDK1.0 时就已存在&#xff09;线程安全的容器&#xff0c;其核心方法都是 synchronized 修饰的。 相反 HashMap 不是线程安全的。 HashTable与HashMap对比 二者继承体系 HashTable HashMap 从图中可以对比得出…