创建索引常用规则

1、表的主键、外键必须有索引;

2、数据量超过300的表应该有索引;

3、经常与其他表进行连接的表,在连接字段上应该建立索引;

4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;

5、索引应该建在选择性高的字段上;

6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;

7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;

如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;

如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

8、频繁进行数据操作的表,不要建立太多的索引;

9、删除无用的索引,避免对执行计划造成负面影响;

以上是一些普遍的建立索引时的判断依据。索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。

因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。 另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。

总的来说,小型表肯定不建索引,或者数据库记录在亿条数据级以上,还是建议使用非关系型数据库。


对千万级MySQL数据库建立索引的事项及提高性能的手段

注意事项:

首先,应当考虑表空间和磁盘空间是否足够。我们知道索引也是一种数据,在建立索引的时候势必也会占用大量表空间。因此在对一大表建立索引的时候首先应当考虑的是空间容量问题。其次,在对建立索引的时候要对表进行加锁,因此应当注意操作在业务空闲的时候进行。

性能调整方面:

首当其冲的考虑因素便是磁盘I/O。物理上,应当尽量把索引与数据分散到不同的磁盘上。逻辑上,数据表空间与索引表空间分开。这是在建索引时应当遵守的基本准则。

MySql在索引优化时需要注意的问题

设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率。

创建索引:

对于查询占主要的应用来说,索引显得尤为重要。很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致。如果不加索引的话,那么查找任何哪怕只是一条特定的数据都会进行一次全表扫描,如果一张表的数据量很大而符合条件的结果又很少,那么不加索引会引起致命的性能下降。但是也不是什么情况都非得建索引不可,比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。

复合索引:

比如有一条语句是这样的:

select * from users where area=’beijing’ and age=10;

如果我们是在area和age上分别创建单个索引的话,由于mysql查询每次只能使用一个索引,所以虽然这样已经相对不做索引时全表扫描提高了很多效率,但是如果在area、age两列上创建复合索引的话将带来更高的效率。如果我们创建了(area, age,salary)的复合索引,那么其实相当于创建了(area,age,salary)、(area,age)、(area)三个索引,这被称为最佳左前缀特性。因此我们在创建复合索引时应该将最常用作限制条件的列放在最左边,依次递减。

索引不会包含有NULL值的列:

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

排序的索引问题:

mysql查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

like语句操作:

一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%a%” 不会使用索引而like “aaa%”可以使用索引。

不要在列上进行运算:

select * from users where YEAR(adddate)

不使用NOT IN:

NOT IN和操作都不会使用索引将进行全表扫描。NOT IN可以NOT EXISTS代替

mysql like 多个条件_千万级MySQL数据库这样建索引可以让你的数据库飞起来.........相关推荐

  1. MySQL limit 优化,百万至千万级快速分页:复合索引

    2019独角兽企业重金招聘Python工程师标准>>> MySQL 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始.有过痛苦有过绝望,到现在充满信心! ...

  2. mysql大于等于怎么写_MySQL 对于千万级的大表要怎么优化?我写了6000字的深度解读...

    千万级大表如何优化,这是一个很有技术含量的问题,通常我们的直觉思维都会跳转到拆分或者数据分区,在此我想做一些补充和梳理,想和大家做一些这方面的经验总结,也欢迎大家提出建议. 从一开始脑海里开始也是火光 ...

  3. 如何估算代码量_千万级用户的大型网站,应该如何设计其高并发架构?(彩蛋)...

    目录 (1)单块架构 (2)初步的高可用架构 (3)千万级用户量的压力预估 (4)服务器压力预估 (5)业务垂直拆分 (6)用分布式缓存抗下读请求 (7)基于数据库主从架构做读写分离 (8)总结 本文 ...

  4. 幽灵交易策略_千万级 交易商 独家 策略 开盘区间 突破 PZ Stretch 指标

    千万级 交易商 独家 策略 开盘区间 突破 PZ Stretch 指标 PZ Stretch 指标 是根据成功交易者[Toby Crabel]的独特交易策略,并由著名开发公司 Point Zero 研 ...

  5. mysql动力节点百度云_动力节点MySQL数据库视频 百度云 网盘 下载

    资源名称:动力节点MySQL数据库视频 百度云 网盘 下载 # o4 E. q% ]2 ?百度网盘下载链接:[/hide]- t4 L+ S# b2 T( }! d) n& d 密码:dff7 ...

  6. mysql pmt函数怎么用_在Golang中如何正确地使用database/sql包访问数据库

    本文记录了我在实际工作中关于数据库操作上一些小经验,也是新手入门golang时我认为一定会碰到问题,没有什么高大上的东西,所以希望能抛砖引玉,也算是对这个问题的一次总结.其实我也是一个新手,机缘巧合几 ...

  7. mysql支持的并发数_重学MySQL系列(五):谈谈对MySQL的存储引擎的理解

    原创作者,公众号[程序员读书],欢迎关注公众号,转载文章请注明出处哦. MySQL关于存储引擎的架构设计,相较于其他关系数据库管理系统,比如Oracle,SQL Server等数据库,这是MySQL最 ...

  8. mysql中日期相减_如何使用MySQL数据库

    如何使用MySQL数据库 前言:前面我们已经了解了如何搭建MySQL数据库,那么接下来我们就一起来了解一下,如何使用MySQL数据库. MySQL数据库系统也是一个典型的C/S(客户端/服务器)架构应 ...

  9. mysql命令参数详解_详解Mysql命令大全(推荐)

    主要介绍常用的MySQL命令,包括连接数据库,修改密码,管理用户,操作数据库,操作数据表,数据库备份等,每个命令都配有实例说明,让大家更容易理解. 1.连接Mysql 格式: mysql -h主机地址 ...

最新文章

  1. scroll-苹果滑动卡顿
  2. 对于5G通信 我们可能都有一点误解
  3. 10.Facade-外观模式
  4. CSS 基础:文本和字体(4)思维导图
  5. 15.确保“lessT“与“operator小于“具有相同的语义
  6. 7天4场直播,涵盖DBA职业发展必备软实力、Oracle和MySQL技术等
  7. python安装robotframework报错_Python3+RIDE+RobotFramework自动化测试框架搭建过程详解
  8. 【原创】大叔问题定位分享(11)Spark中对大表子查询加limit为什么会报Broadcast超时错误...
  9. bootstrapTable 取消 “正在加载中...”
  10. 页面显示正常,控制台报错
  11. 某计算机有五级中断L4,2011计算机基础考研组成原理部分
  12. 【位操作笔记】计算以2为底整数N的对数 查表法
  13. 类抽屉问题的C++解决
  14. [视频教程][斯坦福大学公开课:ios7应用开发 18集]
  15. JAVA公司网站系统毕业设计 开题报告
  16. oracle psu无法开库,Oracle 12.2应用PSU后数据库无法启动
  17. java 组合实现汽车类 问题描述:一辆Car有(has)四个轮子(Wheels)和一个发动机(Engine)。现在要求用组合方法设计类Car、类Wheel和类Engine。
  18. 配置静态NAT和配置动态NAT
  19. Android 学习论坛博客及网站推荐 1
  20. android对象序列化的方法,Android 进阶-两种序列化方式 Serializable 和 Parcelable

热门文章

  1. LeetCode 404. 左叶子之和(递归)
  2. hal库开启中断关中断_STM32对HAL库的定时器中断
  3. vue获取table一列数据_vue表格含有一列多选框,如何获取被选中的行的数据?
  4. Linux单用户能做什么,Linux单用户模式详解 及应用场景
  5. linux中的网络体系结构
  6. spark调用python_在MRS集群中使用Python3.7运行PySpark程序,调用RDD的take函数报错处理...
  7. 知识图谱入门知识(三)词性标注
  8. 可交互的 Attention 可视化工具!我的Transformer可解释性有救了?
  9. 从前,小夕种了一棵树
  10. 深度剖析RPC框架的核心设计