热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

2022年5月3日【狂神说Java】MySQL最新教程通俗易懂4索引

7索引索引(index)是帮助mysql高效获取数据的数据结构7.1索引的分类在一个表中,主键索引只能有一个,唯一索引可以有多个主键索引primarykey唯一的标识,主键不可重复

7 索引


索引(index) 是帮助mysql高效获取数据的数据结构



7.1 索引的分类


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



  • 主键索引 primary key
    • 唯一的标识,主键不可重复, 只能有一个列作为主键
  • 唯一索引 unique key
    • 避免重复的列出现, 唯一索引可以有多个, 多个列都可以标志为唯一索引
  • 常规索引 key/index
    • 默认的, index /key关键字来设置
  • 全文索引 (fullTest)
    • 在特定的数据库引擎下才有, myIsam
    • 快速定位数据

-- 索引的创建
-- 1. 在创建表的时候给字段增加索引CREATE TABLE `app_user` (`id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT = 'app用户表'
;-- 2. 创建完毕后, alter table 给表增加索引
Alter table app_useradd INDEX `name`(`name`)-- 3. create index 索引名 on 表名(列名)
CREATE INDEX id_app_user_name ON app_user(`name`);

-- 索引的使用-- 显示所有的索引信息
show INDEX from school.student;-- 添加索引
alter table student add INDEX `pwd`(`pwd`)-- 增加一个全文索引(索引名) 列名
alter table school.student add FULLTEXT INDEX `studentname`(`name`);-- EXPLAIN 分析SQL执行的状况
EXPLAIN select * from student;explain select *from student where match(name) against('张');

7.2 测试索引(代码可用)

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用户表'
;-- 插入100万数据
delimiter $$ -- 写函数前必须写
create function mock_data()
returns int
BEGINDECLARE num int DEFAULT 10;DECLARE i int DEFAULT 0;WHILE i<num DOINSERT INTO app_user(&#96;name&#96;,&#96;email&#96;,&#96;phone&#96;,&#96;gender&#96;,&#96;password&#96;)VALUES(CONCAT(&#39;用户&#39;,i),&#39;1234&#64;1234.com&#39;,&#39;12345&#39;,floor(RAND()*2),floor(RAND()*99999));set i &#61; i&#43;1;END WHILE;return i;
end;SELECT mock_data();/*SELECT mock_data()
> OK
> 查询时间: 35.61s
*/

-- 没加索引之前,查询需要1sexplain select * from app_user where name &#61;&#39;用户9999&#39;;-- 创建索引方式3CREATE INDEX id_app_user_name ON app_user(&#96;name&#96;);
-- 加索引之后, 查询0s

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


7.3 索引原则


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

索引的数据结构



  • Hash类型的索引

  • Btree: InnoDB默认的结构


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ... [详细]
  • 本文主要复习了数据库的一些知识点,包括环境变量设置、表之间的引用关系等。同时介绍了一些常用的数据库命令及其使用方法,如创建数据库、查看已存在的数据库、切换数据库、创建表等操作。通过本文的学习,可以加深对数据库的理解和应用能力。 ... [详细]
  • 本文介绍了Oracle存储过程的基本语法和写法示例,同时还介绍了已命名的系统异常的产生原因。 ... [详细]
  • 本文详细介绍了使用C#实现Word模版打印的方案。包括添加COM引用、新建Word操作类、开启Word进程、加载模版文件等步骤。通过该方案可以实现C#对Word文档的打印功能。 ... [详细]
  • 带添加按钮的GridView,item的删除事件
    先上图片效果;gridView无数据时显示添加按钮,有数据时,第一格显示添加按钮,后面显示数据:布局文件:addr_manage.xml<?xmlve ... [详细]
  • 本文介绍了解决java开源项目apache commons email简单使用报错的方法,包括使用正确的JAR包和正确的代码配置,以及相关参数的设置。详细介绍了如何使用apache commons email发送邮件。 ... [详细]
  • 正则表达式及其范例
    为什么80%的码农都做不了架构师?一、前言部分控制台输入的字符串,编译成java字符串之后才送进内存,比如控制台打\, ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • Python正则表达式学习记录及常用方法
    本文记录了学习Python正则表达式的过程,介绍了re模块的常用方法re.search,并解释了rawstring的作用。正则表达式是一种方便检查字符串匹配模式的工具,通过本文的学习可以掌握Python中使用正则表达式的基本方法。 ... [详细]
  • 开发笔记:select from具体执行相关知识介绍及案例分析
    本文由编程笔记小编整理,主要介绍了select from具体执行相关的知识,包括数据插入、查询最小rowID、查询每个重复名字的最小rowID、删除重复数据等操作,并提供了案例分析。希望对读者有一定的参考价值。 ... [详细]
  • C语言自带的快排和二分查找
    Author🚹:CofCaiEmail✉️:cai.dongjunnexuslink.cnQQ😙:1664866311personalPage&#x ... [详细]
author-avatar
千与千寻de秘密
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有