首先表内容展示:

# 300W条的模拟数据

# 并且没有建立任何索引

不建立索引的查询时间:

以id查询的(4秒多):

以email查询的(4秒多):

建立主键索引后:

alter table s1 modify id int primary key auto_increment;

建立后再查询:

# 以id查不到1秒,所以索引要建立正确且查询条件得适合

建立email字段的普通索引:

create index email_index on s1(email);

建立后查询:

# 瞬间快了非常多

mysql的索引介绍:

建立索引为了提高查找的效率,建立正确索引,以及sql查询语句正确,则可以提高用户体验。

mysql的索引:

primary key  # 唯一 + 非空 + 聚集索引

unique key   # 唯一 + 索引,辅助索引

index key    # 普通索引,能够加速查询,辅助索引

foreign key  # 本身没有索引的,但是它关联的外表中的字段是unique索引

注:

(1) 主键作为条件的查询如果能够让索引生效那么效率总是更高

(2) primary key 和unique 标识的字段不需要再添加索引,直接就可以利用索引加速查询

(3) 能用unique的时候尽量不用index,因为普通索引可以是建立再稍有重复的字段,但不可以重复过多的字段(大概重复10%以上不能建立普通索引了)

关于索引的建立和删除:

# 最好在建表时候考虑好

添加主键:

alter table tablename add primary key(列名);

删除主键:

alter table tablename drop primary key;

添加普通索引:

create index 索引名 on 表名(字段名);

删除普通索引:

drop index 索引名 on 表名;

添加unique:

alter table 表名 add unique (字段);

删除unique:

alter table 表名 drop index字段;

mysql的语句优化:

(1) 查询条件字段一定是建立了索引的,如果查询的条件字段没有创建索引,那么无效

(2) 查询条件不能是一个范围条件,随着范围值的增大,索引发挥的作用越小

如:select * from s1 where id > 10000 and email='eva99999@oldboy';  # 这个语句不太好

(3) 使用like模糊查询,使用abc%形式可以命中索引,但是%abc%不能命中索引

如:

(4) 索引列不要在条件中参与计算,也不要使用函数

(5) 多个索引条件以and相连时候,优先选择区分度高的索引来进行查询

如:select * from s1 where id=999 and username='zezhou';

查看mysql语句的执行计划:

# 可以看到该sql语句命中索引的情况

格式:explain sql语句;

没建立索引:

建立了索引后:

查看是否命中索引的例子:

mysql 索引查询_mysql索引的建立和查询语句优化相关推荐

  1. MySQL建立的索引看_MYSQL索引问题:索引在查询中如何使用?看了很多资料都只说索引的建立。是否建立了就不用再理会?...

    # 有这样一个表 P mysql> create table P (id int primary key, name varchar(10) not null, sex varchar(1), ...

  2. mysql 数据索引使用_mysql数据库正确建立索引及使用

    普通mysql运行,数据量和访问量不大的话,是足够快的,但是当数据量和访问量剧增的时候,那么就会明显发现MySQL很慢,甚至down掉,那么就要考虑优化我们的mysql了.其中优化mysql的一个重要 ...

  3. mysql 索引计划_Mysql索引、查询计划、优化方向

    索引 Innodb索引(聚集索引)(聚簇表分布) Innodb是索引组织表,其结构是B+Tree.其表索引结构是聚簇表分布. 其叶子节点保存了Key+Row Data(聚集索引,按主键排序),其Key ...

  4. authentication method mysql 8.0查询_mysql 索引整理

    一.MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 为何要有索引? ​ 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更 ...

  5. mysql查询索引位置_mysql索引在什么位置

    mysql索引的位置在[数据库安装目录\data\databasename].索引是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键. MySQL中索引的简介 (视频教程推荐:mys ...

  6. mysql 子查询索引失效_mysql 索引失效的情况

    索引失效的几种情况 1.如果条件中有or,即使其中有条件带索引也不会使用(这也是为什么尽量少用or的原因) 要想使用or,又想让索引生效,只能将or条件中的每个列都加上索引 2.对于多列索引,不是使用 ...

  7. mysql多索引结构_MySQL 索引结构

    谈到 MYSQL 索引服务端的同学应该是熟悉的不能再熟悉,新建表的时候怎么着都知道先来个主键索引,对于经常查询的列也会加个索引加快查询速度.那么 MYSQL 索引都有哪些类型呢?索引结构是什么样的呢? ...

  8. mysql多列索引用处_MySQL索引使用说明(单列索引和多列索引)

    1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一.可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列.请看下面这个查询: 这个查询与前 ...

  9. mysql 索引语法_MySQL 索引:语法及案例剖析

    MySQL 索引 MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索 ...

最新文章

  1. 车 局部路径规划与避障
  2. LPMS_IMU在TX2上使用
  3. sharding jdbc sql路由日志
  4. CNN和VGGNet-16背后的架构
  5. reposurgeon 2.15 发布
  6. Hive:解决Hive创建文件数过多的问题
  7. 交互式线上科学期刊Distill上线,Ian Goodfellow表示“学ML就找它”
  8. Keil精确测量代码运行时间
  9. CTO俱乐部下午茶:技术团队管理中的那些事儿
  10. 注定不平凡的2020年
  11. windows下dos窗口实现持续ping显示时间保存至日志
  12. Exception from HRESULT: 0x800A03EC
  13. 搭建VS2008下QT开发环境
  14. 火山引擎对外开放推荐算法等字节跳动核心技术
  15. JAVA程序员,你读过这些书吗?
  16. 分享两个必应壁纸接口,可用来获取高质量壁纸和故事
  17. [poj2449]Remmarguts' Date(spfa+A*)
  18. 用JQuery实现简单计时答题游戏
  19. 千兆网线 双机互联交叉线
  20. MySQL 系统自带的数据库有哪些?每个数据库的作用是什么?

热门文章

  1. IPM: Product 270015453 not scheduled in sales organization
  2. jQuery in BSP
  3. SAP UI5关于navigation API的boolean参数
  4. 用一个实际例子理解Docker volume工作原理 1
  5. 服务器内提取文件,linux命令如何提取文件夹内特定文件路径
  6. x79主板bios设置中文_bios菜单
  7. 用递归调用法求斐波那契函数_进阶版:面试官问你斐波那契数列的时候不要高兴得太早...
  8. 宝塔更换域名_阿里云如何建站、域名、搭建网站?
  9. gitee github区别_Github吃大力 速度飙升 2MB/s
  10. ffmpeg 转码_小水谈转码---FFmpeg安装