2. 知识剖析

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

创建索引时,你需要确保该索引是应用在SQL 查询语句的条件(一般作为 WHERE 子句的条件)。

实际上,索引也是一张表,该表保存了主键与索引字段,并指向实体表的记录。

但过多的使用索引将会造成滥用。因此索引也会有它的缺点:虽然索引大大提高了查询速度,同时却会降低更新表的速度。

因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

普通索引

普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。

因此,应该只为那些最经常出现在查询条件(WHEREcolumn=)或排序条件(ORDERBYcolumn)中的数据列创建索引。

只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。

mysql > ALTER TABLE {table_name} ADD INDEX index_name ( {column} )

唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。

在对该列进行增或改时,首先会检查是否重复,在执行增改操作,否则报出duplica错误,拒绝操作。

mysql > ALTER TABLE {table_name} ADD INDEX index_name ( {lolumn} )

3. 常见问题

如果表中没有所以会发生什么?

一旦我们运行这个查询,在查找名字AAA的过程中,数据库不得不对表中的每一行检索并确定名字是否为AAA。

由于我们想要得到每一个名字为AAA的用户信息,在查询到第一个符合条件的行后,不能停止查询,因为可能还有其他符合条件的行。

所以,必须一行一行的查找直到最后一行这就意味数据库不得不检查上千行数据才能找到所以名字为AAA的用户。这就是所谓的全表扫描。

索引是怎么提升性能的?

因为索引基本上是用来存储列值的数据结构,这使查找这些列值更加快速。

如果索引使用最常用的数据结构-B-Tree-那么其中的数据是有序的。

假设我们在name一列上创建一个B-Tree索引。这意味着当我们用之前的SQL查找姓名是AAA的用户时,不需要再扫描全表,而是用索引查找去查找名字为AAA的用户。

因为索引已经按照按字母顺序排序。索引已经排序意味着查询一个名字会快很多,因为名字少字母为AAA的员工都是排列在一起的。另外重要的一点是,索引同时存储了表中相应行的指针以获取其他列的数据。

4. 解决方案

使用索引的原则:

1、装载数据后再建立索引。

2、频繁搜索的列可以作为索引。

3、在联接属性上建立索引(主外键)。

4、经常排序分组的列。

5、删除不经常使用的索引。

6、指定索引块的参数,如果将来会在表上执行大量的insert操作,建立索引时设定较大的ptcfree。

7、指定索引所在的表空间,将表和索引放在不同的表空间上可以提高性能。

8、对大型索引,考虑使用NOLOGGING子句创建大型索引。

不要在下面的列创建索引:

1、仅包含几个不同值得列。

2、表中仅包含几条记录。

DEMO

先创建user表

CREATE TABLE user(

id INT NOT NULL,

number INT NOT NULL

);

普通索引

ALTER TABLE USER ADD INDEX ID_INDEX(ID);

唯一索引

ALTER TABLE USER ADD UNIQUE NUMBER_INDEX(NUMBER);

查看索引

SHOW INDEX FROM USER;

mysql 索引必须唯一_唯一索引和普通索引的区别是什么,什么时候需要建唯一相关推荐

  1. mysql text 查询速度_数据库学习之让索引加快查询速度(四)

    数据库学习之让索引加快查询速度 目录 索引简介 mysql的索引分类 创建索引 添加与删除索引 索引简介 索引在MySQL中也叫做"键",是存储引擎用于快速找到记录的一种数据结构. ...

  2. MySQL为数据创建索引的目的_为数据表创建索引的目的是什么

    一.SQL创建索引的目的如下: 1.通过唯一性索引(unique)可确保数据的唯一性: 2.加快数据的检索速度: 3.加快表之间的连接: 4.减少分组和排序时间: 5.使用优化隐藏器提高系统性能. 二 ...

  3. python索引取值_对pandas的层次索引与取值的新方法详解

    1.层次索引 1.1 定义 在某一个方向拥有多个(两个及两个以上)索引级别,就叫做层次索引. 通过层次化索引,pandas能够以较低维度形式处理高纬度的数据 通过层次化索引,可以按照层次统计数据 层次 ...

  4. 可由线性表示且表达式唯一_一个向量能由另一个向量组线性表示,且表示式唯一的等价条件是什么?...

    展开全部 表示唯一即需要A中的向量不能相互表示,也就是A中的向量线性无关时,由A中向量表示成b时表示方法唯32313133353236313431303231363533e58685e5aeb9313 ...

  5. mysql组合索引 唯一_(四):MySQL建立索引,唯一索引和组合索引

    # (四):MySQL建立索引,唯一索引和组合索引 先大致介绍下项目的数据库信息. 数据库A:主要存放的通用的表,如User.Project.Report等. 数据库B.C.D:一个项目对应一个数据库 ...

  6. MySQL中的聚簇索引、非聚簇索引、联合索引和唯一索引

    一.索引类型 索引根据底层实现可分为B-Tree索引和哈希索引,大部分时候我们使用的都是B-Tree索引,因为它良好的性能和特性更适合于构建高并发系统. 根据索引的存储方式来划分,索引可以分为聚簇索引 ...

  7. mysql导入dat文件_从零开始学习 MySQL 系列--索引、视图、导入和导出

    前言 上篇文章我们学习了数据库和数据表操作语句,今天我们学习下数据库索引,视图,导入和导出的知识. 作为基础篇,不会涉及到关于索引和视图的高级应用和核心概念,但是基本操作大家会了解,尤其是关于索引的内 ...

  8. mysql四种常用的索引_四种常见的索引类型

    主键索引:数据记录里面不能有 null,数据内容不能重复,在一张表里面不能有 多个主键索引. 普通索引:使用字段关键字建立的索引,主要是提高查询速度 唯一索引:字段数据是唯一的,数据内容里面能否为 n ...

  9. mysql使索引失效语句_会导致索引失效语句

    1.使用like关键字模糊查询时,% 放在前面索引不起作用,只有"%"不在第一个位置,索引才会生效(like '%文'–索引不起作用) 2.使用联合索引时,只有查询条件中使用了这些 ...

  10. mysql 分组占比_含泪整理MySQL索引

    索引优化分析 性能下降SQL慢 查询语句写的差 索引失效 单值索引 多值索引 关联查询太多join(设计缺陷或不得已的需求) 服务器调优以及各个参数设置(缓冲.线程数等) 执行时间长 等待时间长 常见 ...

最新文章

  1. 独家 | 数据分析@爱可可-爱生活是否在用机器学习算法运营微博
  2. NumPy 广播的可视化
  3. C++ enum 枚举
  4. 32命令模式(Command Pattern)
  5. 自定义导航页_带你回归“真”的导航页
  6. Linux 中设置环境变量的三种方法
  7. axure 动态面板实现图片轮播效果(淘宝)
  8. MySQL 中的共享表空间与独立表空间,用哪个好呢?
  9. list里面的数据按3个字段排序_springboot2.X手册:redis的7种类型100个方法全解析
  10. python和前端(三)JS的激情
  11. 论文公式编号MATHTYPE
  12. 如何在MacBook中录制iphone模式的视频?macbook屏幕模糊如何解决?
  13. 塞班(Symbian)开源了(包括Symbian 3和S60等)
  14. 【每天更新】2022年最新WordPress主题下载(2022-5-12)
  15. 云原生|kubernetes|minikube的部署安装完全手册(修订版)
  16. 用plt.scatter画散点图
  17. 带密码的php文件管理器,PHP文件管理器Tiny File Manager账号密码修改方法
  18. 应用层协议 HTTP HTTPS
  19. 稍微冷门一点的经验,phpnow不能打开默认页的问题处理
  20. 物理CPU与VCPU的关系梳理总结

热门文章

  1. Message、Handler、MessageQueue、Looper之间的关系
  2. Chrome浏览器保存整个网页为图片的方法
  3. python之class
  4. 我的第一个开源项目Zplayer(模仿酷狗)
  5. 信号的频谱、幅度谱、相位谱及能量谱密度、功率谱密度
  6. 2022年数据分析与可视化10大案例总结
  7. Scrum 敏捷开发 笔记
  8. 设计一个家庭记账管理系统(Java)
  9. 语义分割算法汇总(长期更新)
  10. 计算机主机清洁维护,电脑主机日常维护保养