创建二级索引_Mysql创建索引

零:文章概要

这篇文章,主要是和大家一起去了解 索引,然后一起使用CREATE INDEX语法给数据库中的表创建一个索引。

一:先拿电话薄做个类比

假如,一个电话薄里面包含了一个城市的所有人的姓名和电话号码。那么,想找到Bob Cat的电话号码,另外我们知道电话簿中名字是按照字母顺序排列的,所以首先要查找姓氏为Cat的页面,然后在这个页面下查找名字为Bob的电话号码。

那如果在电话薄中的名字没有按照字母排列,就需要去浏览所有的页,然后在里面查找每个姓名直到找到Bob Cat,这种是查找了所有的电话页,所以在时间上还是挺费时的。

那我们将电话簿与数据库表联系起来,如果有一个电话簿表然后要找到Bob Cat的电话号码,则可以执行以下查询:

SELECTphone_number
FROM phone_book
WHERE first_name = 'Bob' AND last_name = 'Cat';

这个写起来很容易,在数据量不大的时候查询速度很快,但数据库必须扫描表的所有行,直到找到该行为止,如果表有数百万行而没有索引时,则检索数据会耗费很多的时间。

二:索引的介绍

索引是一种数据结构,例如B-Tree,这种数据结构是需要额外的写入和存储为代价来提高表上数据检索的速度。一旦建立了索引后,数据库中查询优化器使用索引来快速定位数据,然后就无需扫描表中给定查询的每一行了。

其中。当使用主键或唯一键创建表时,MySQL会自动创建名为PRIMARY的特殊索引, 该索引称为聚簇索引。PRIMARY索引是比较特殊的,这个索引本身与数据一起存储在同一个表中。另外除PRIMARY索引之外的其他索引称为二级索引或非聚簇索引。

三:MySQL CREATE INDEX语句

通常,创建表的时候就能为表创建索引。 例如,以下语句创建一个新表,并创建了是由两列c2和c3组成的索引。

CREATE TABLE t(c1 INT PRIMARY KEY,c2 INT NOT NULL,c3 INT NOT NULL,c4 VARCHAR(10),INDEX (c2,c3) 
);

但是要为列或一组列添加索引,可以使用CREATE INDEX语句,如下所示:

CREATE INDEX index_name ON table_name (column_list)

要为列创建索引,要指定索引名称,索引所属的表以及列。

例如,要为列c4添加新索引,请使用以下语句:

CREATE INDEX idx_c4 ON t(c4);

默认情况下,如果未指定索引类型,MySQL将创建B-Tree索引。 以下显示了基于表的存储引擎的允许索引类型:

96d79f5b90164bbdbf2297c69206be5f.png

四:MySQL CREATE INDEX 举例

以下语句查找职位为Sales Rep的员工:

SELECT employeeNumber, lastName, firstName
FROMemployees
WHEREjobTitle = 'Sales Rep';

f3b4e0a2d049fd5a26c17bf8c5d69935.png

这里数据返回了17行,表明17名员工的职位是销售代表。

那我们要查看MySQL如何在内部执行此查询,可以在SELECT语句的开头添加EXPLAIN子句,会得到下面的结果:

e6b12e9970a9110392bcaef8cfbe3973.png

可以看到,MySQL必须扫描包含23行的整个表,以查找具有Sales Rep职位的员工。

现在,让我们使用CREATE INDEX语句为jobTitle列创建一个索引:

CREATE INDEX jobTitle ON employees(jobTitle);

并再次执行上述语句:

EXPLAIN SELECT employeeNumber, lastName, firstName
FROMemployees
WHEREjobTitle = 'Sales Rep';

69720b2330a3ddc400a9a3b54cbb1b3e.png

这时候看到,MySQL只需要在键列中指示的jobTitle索引中找到17行而不扫描整个表。

如果要显示表的索引,可以使用下SHOW INDEXES语句,例如:

SHOW INDEXES FROM employees;

返回结果如下的索引

fe12f65b41b422561e112e54739a93ce.png

image.png

这篇文章中我们介绍了MySQL索引以及如何为表中的列添加索引,希望大家可根据文末提供的数据源来自己敲写代码

翻译参考:

1.Mysql创建索引

2.文章使用的数据源

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

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

相关文章

转hdmi_苹果本轻松接大屏,毕亚兹雷电接口转HDMI/VGA转换器评测

作为上班族,日常开会加出差,经常需要用到笔记本连接投影仪投屏。很多小伙伴为了高效办公,使用的都是性能强劲但是设计轻薄的笔记本产品,最常见的就是苹果笔记本。但是比较尴尬的是,目前可以使用的绝大部分苹果笔记本电…

计算机专业教学工作小结,计算机专业教学的工作总结

本人在教育教学上,爱岗敬业,严谨治教,热爱学生,努力做到把学生教好,让学生成功成才,优秀教师应有的职责。因此我在教育教学方面注意了以下几个问题,现作工作总结如下:一、思想方面本…

使用Java流查询数据库

在本文中,您将学习如何编写纯Java应用程序,这些应用程序能够处理现有数据库中的数据,而无需编写单行SQL(或类似的语言,例如HQL),也无需花费数小时将所有内容放在一起。 准备好应用程序之后&…

2017计算机信息技术,2017年一级计算机信息技术及应用考试试题级答案[权威资料]...

2017年一级计算机信息技术及应用考试试题级答案 本文档格式为WORD,感谢你的阅读。最新最全的 学术论文 期刊文献 年终总结 年终报告 工作总结 个人总结 述职报告 实习报告 单位总结 演讲稿2017年一级计算机信息技术及应用考试试题级答案一、基础知识题(共45分,每题1…

sigquit信号默认忽略吗_linux下的信号列表

我们运行如下命令,可看到Linux支持的信号列表:$ kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 17) SIGCHLD18) SIGC…

恐鬼症不显示服务器区域,恐鬼症 steam版【简体中文】【4.34GB】

游戏介绍《恐鬼症(Phasmophobia)》是一款玩法十分精彩的冒险解谜类游戏,这款游戏支持4人联机对战,共同寻找隐藏的秘密,游戏的过程比较惊悚,需要玩家拥有强大的心里承受能力,气氛和渲染都十分的优质,游戏由K…

进程比线程更多资源_为什么我们不应该使用比我们需要更多的线程

进程比线程更多资源总览 有一个普遍的论点,因为我们有很多核心,并且将来还会有更多核心,所以我们必须使用它们。 我们只是需要找到使用它们的最佳方法,而仅仅是因为我们不能意味着我们应该这样做。 我们的目标是什么?…

ajax默认什么方法,ajax设置默认值ajaxSetup()方法

$(function(){//设置全局 jQuery Ajax全局参数$.ajaxSetup({type:"POST",async:false,cache:false,dataType:"JSON",error:function(jqXHR,textStatus,errorThrown){switch(jqXHR.status){case(500):alert(服务器系统内部错误);break;case(401):alert(未登…

Java谓词的延迟执行

在先前的文章“ 用Java的供应商延迟执行 ”和“ Java的消费者延迟执行 “,我看着很容易地通过推迟标准Java API接受,分别在Java执行供应商 S和消费者秒。 在本文中,我将对标准JDK提供的API如何通过标准功能接口Predicate允许延迟执行进行类似…

android实现评论列表_【Android视图效果】分组列表实现吸顶效果

效果图效果图分析先来分析一下,可以看到这是一个按月份分组的2行图片列表,列表顶部一个悬浮栏,会随着列表滑动而刷新,点击顶部栏,弹出了一个筛选框。思路1.列表部分可以用RecyclerViewGridLayoutManager,月…

用ajax写无限循环,ajax无限循环

// 猜你喜欢的无限加载(function(){var content document.getElementsByClassName("content")[0];var footer document.getElementsByTagName("footer")[0];var winh window.innerHeight - footer.offsetHeight;var ul document.getElementById("…

JDK 11:发行候选更新和OpenJDK JDK 11 LTS

JDK 11是预定被释放的一般可用性上周二,9月25日2018年2018年8月16日马克莱因霍尔德消息上OpenJDK的JDK-dev邮件列表宣布“ JDK 11现在在候选发布版阶段 。” 但是,Reinhold在2018年8月17日同一封邮件列表中的消息中提供了更新的详细信息,他在…

lr监控虚拟服务器,lr监控服务器 教程

lr监控服务器 教程 内容精选换一换本教程旨在演示使用GDS(General Data Service)工具将远端服务器上的数据导入GaussDB(DWS)中的办法,帮助您学习如何通过GDS进行数据导入的方法。在本教程中,您将:生成本教程需要使用的CSV格式的数据源文件。将…

mysql-5.5密码是多少_关于mysql-5.5数据库密码的设置和重置

一、mysql-5.5数据库的密码长什么样?直接打开给你看:[rootlnmp1 ~]# mysql -uroot -p#在已知密码的情况想打开数据库Enter password:Welcome to the MariaDB monitor. Commands end with ; or \g.Your MariaDB connection id is 4Server version: 5.5.64…

华为OD机试真题-停车场车辆统计-2023年OD统一考试(C卷)

题目描述: 特定大小的停车场,数组cars[]表示,其中1表示有车,0表示没车。车辆大小不一,小车占一个车位(长度1),货车占两个车位(长度2),卡车占三个车位(长度3),统计停车场最少可以停多少辆车,返回具体的数目。 输入描述: 整型字符串数组cars[],其中1表示有车,0…

vc mysql 图片_VC连接MySQL

一、MySQL的安装可以考虑安装mysql-5.0.41-win32(可到http://www.newhua.com/soft/3573.htm处下载),当然你有更新的版本更好,注意选择“完全安装”(只有这样才会安装VC编译时需要的头文件等)。安装后期会进行服务器配置,你可以设置你的服务器…

魔兽巨龙追猎者服务器微信群,魔兽世界:难怪现在“龙脊”价格低,掉落率提升,群里一天出几个...

祥子哥最近几天一直在练猎人号,目前已经67级了,再过两三天差不多就能满级了。知道祥子哥为什么练猎人吗?不全是因为猎人伤害高玩着爽,还有另一个原因,那就是“龙脊奖章”现在价格很便宜,祥子哥使把劲应该能…

mysql group原理_MySQL Group By 实现原理分析

【IT168 专稿】由于 GROUP BY 实际上也同样会进行排序操作,而且与 ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作。当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,在…

使用AWS Lambda的CloudWatch事件通知

CloudWatchEvents的主要用例是跟踪整个AWS基础架构中的更改。 当前,它支持在Auto Scaling组,EC2,EBS和其他各种事件中发出的事件。 为了对这些事件进行有意义的处理,我们需要一种消耗它们的方法。 AWS使用术语“ targets来指代任何…

nodejs接收表单写入mysql_NodeJS提交表单存数据库(转)

姓名:性别:年龄:手机:$(#ok_btn).on(click,function(){var name $.trim($(#name).val()),sex $.trim($(#sex).val()),age $.trim($(#age).val()),tel $.trim($(#tel).val()),data {name : name,sex : sex,age : age,tel : te…