MySql的基石——索引
一.什么是索引
官方定义:一种帮助mysql提高查询效率的一种数据结构,通俗的说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度,一般来说索引本身也很大,不可能全部存储在内存中,因此索引往往是存储在磁盘上的文件中的。
索引的优点
- 大大加快了查询速度
- 通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗
- 如果按照索引列的顺序进行排序,对应order by语句来说,效率就会提高很多
索引的缺点
- 增删改的时候由于多了索引,速率会下降
- 会占用磁盘空间
- 维护索引需要消耗数据库数据
二. 索引的分类
Innodb
- 主键索引
设定为主键后数据库会自动建立索引,innodb为聚簇索引,主键索引不可为null - 唯一索引
索引列的值必须唯一,但可以有空值 - 普通索引
一个索引值包含单个列,一个表可以有多个单利索引 - 复合索引
即一个索引包含多个列
MISAM
- Full Text 全文索引
全文索引类型为Full Text,在定义索引的列上支持值的全文索引,运行在这些索引里面插入重复值和空值,全文索引可以才char,varchar,text类型上创建,mysql只有 myisam上可以创建
三.如何创建索引
主键索引
创建表的时候:
create table user (id int(10) PRIMARY KEY,name varchar(10))
创建表之后:
主键索引创建后就存在
普通索引
创建表的时候:
create table user1 (id int(10) primary key ,name varchar(10),key(name))
创建表之后:
create index name_index on user1
查看索引:
SHOW INDEX FROM USER1
唯一索引
创建表的时候:
create table user2 (id int(10) primary key,name varchar(20),age int(10) unique(name))
创建表之后:
create unique index age_index on user2(age)
查看索引:
show index from user2
复合索引:
创建表之前:
CREATE TABLE user3 (id INT(10) PRIMARY KEY,NAME VARCHAR(10),age INT(10),KEY(NAME,age))
创建表之后:
create index nameageindex on user3(name,age)
查看索引:
show index from user3
三.最左前缀原则:
当复合索引的顺序是name ,age,bir的时候,按照下面字段的顺序查询,是否可以利用索引
- name age bir:可以
- name bir age:可以
- bir name age:不可
- age bir name:不可
- name bir:可以
- name age:可以
- bir name:不可
- bir age:不可
- age bir:不可
当我们按照复合索引字段的顺序查找时,那么就可以利用索引,但是mysql会动态的调整字段的顺序,只要第一个字段存在查询语句里面,就可以
四.索引的数据结构
当我们给一个表插入一些数据的时候,如果写的顺序不一样,那么会是怎么样的呢?答案是会按照索引自动排序,这是为什么呢?
create table emp(id int(10) primary key,name varchar(20),age int(10))insert into emp value(4,'d',22)
insert into emp value(1,'a',12)
insert into emp value(3,'c',32)
insert into emp value(2,'b',72)
insert into emp value(5,'e',22)
索引的原理
为什么上面数据明明没有按顺序插入,为什么查询时却是有顺序呢?
- 原因是:mysql底层为主键自动创建索引,一定创建索引会进行排序
- 也就是mysql底层真正存储是这样的
- 为什么要排序呢?因为排序之后在查询就相对比较快了 如查询 id=3的我只需要按照顺序找到3就行啦(如果没有排序大海捞针,全靠运气
MySql的基石——索引相关推荐
- WebDay19 MySQL存储引擎 索引 锁 集群
MySQL存储引擎 索引 锁 集群 一.MySQL存储引擎 1.MySQL体系结构 2.MySQL存储引擎 3.常用引擎的特性对比 4.引擎的操作 5.总结:引擎的选择 二.MySQL索引 1.索引的 ...
- php普通索引和唯一索引,mysql下普通索引和唯一索引的效率对比
昨天有位同事说,他的网页查询过程中发现普通索引和唯一索引的效率是有差别的,普通索引比唯一索引快 今天在我的虚拟机中布置了环境,测试抓图如下: 抓的这几个都是第一次执行的,刷了几次后,取平均值,效率大致 ...
- mysql添加临时索引_mysql创建索引/删除索引操作
-- 1.ALTER 创建索引 -- table_name表名,column_list列名,index_name索引名 -- 创建index索引 ALTER TABLE table_name ADD ...
- mysql教程联合索引_MySQL中的联合索引学习教程
联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). 可以支持a | a,b| ...
- MySQL 如何创建索引?怎么优化?
2019独角兽企业重金招聘Python工程师标准>>> 索引类似大学图书馆建书目索引,可以提高数据检索的效率,降低数据库的IO成本.MySQL在300万条记录左右性能开始逐渐下降,虽 ...
- PHP面试MySQL数据库的索引
你好,是我琉忆,PHP程序员面试笔试系列图书的作者. 本周(2019.3.4至3.8)的一三五更新的文章如下: 周一:PHP面试MySQL数据库的基础知识 周三:PHP面试MySQL数据库的索引 周五 ...
- mysql 删除重复索引_如何检查mysql的重复索引
展开全部 在一个生产库上,没有创建索引,是不可思议的,当然你的索引创e68a84e8a2ad62616964757a686964616f31333363373765建的太多了.冗余了,更是不可思议的. ...
- mysql实习生笔试题_2014阿里实习生面试题MySQL如何实现索引的
[相关专题推荐:mysql面试题(2020)] 在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的,比如MyISAM和InnoDB存储引擎. MyISAM索引实现: My ...
- mysql的覆盖索引原理_「Mysql索引原理(七)」覆盖索引
通常大家都会根据查询的WHERE条件来创建合适的索引,不过这只是索引优化的一个方面.设计优秀的索引应该考虑到整个查询,而不单单是WHERE条件部分.索引确实是一种查找数据的高效方式,但是MySQL也可 ...
- 论MySQL何时使用索引,何时不使用索引
索引: 使用索引可快速访问数据库表中的特定信息.索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓(name)列.如果要按姓查找特定职员,与必须搜索表中的所有行相比,索 ...
最新文章
- addhandler php5-script php,htaccess和AddType/Addhandler
- 4固定在底部_自建房不搭彩钢棚,4根钢结构撑个玻璃棚遮风挡雨,上面多个露台...
- P3690-[模板]Link Cut Tree(动态树)【Splay】
- MySQL 常见的开放性问题
- 【推荐实践】图片主题模型在推荐系统的应用实践
- [抄]使用网页进行展示而非PPT
- linux 实现秒级定时任务
- 学计算机的感想300字,大学生计算机实训心得体会3篇
- 南昌工程学院c语言试题,南昌工程学院概率论与数理统计试题库部分题目
- (附源码)springboot菠萝大学课室预约分析与设计 毕业设计641656
- 试玩网站搭建讲解入门篇
- [转]FlightCaster如何预测飞机准点的
- 计算机网络自顶向下方法(二)——应用层
- 可用在404 的几句诗词
- html中padding在ie8兼容性,怎么解决bootstrap在各版本IE浏览器中的兼容性问题?
- 计算机教学参与录,青山湖区京东学校参与省级线上教学课程录制工作
- ROS中的Client Library与roscpp talker lisener
- 如何搭建“业务化”的指标体系?
- 《可可西里》:一只被人类轮奸的藏羚羊
- java 替换全角为半角 半角转全角
热门文章
- WebDay19 MySQL存储引擎 索引 锁 集群