mysql在有索引的情况下,添加数据,mysql都做了些什么?

mysql建立索引的主要目的

浅谈Mysql哪些字段适合建立索引

  • 2、对千万级MySQL数据库建立索引的事项及提高性能的手段
  • MySql在建立索引优化时需要注意的问题
  • 3,索引不会包含有NULL值的列
  • 7,不要在列上进行运算

1 数据库建立索引常用的规则如下:

1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:

A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B 、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;

8、频繁进行数据操作的表,不要建立太多的索引;
9、删除无用的索引,避免对执行计划造成负面影响;

以上是一些普遍的建立索引时的判断依据。
索引的建立必须慎重,对每个索引的必要性都应该经过仔细分析,要有建立的依据。
因为太多的索引与不充分、不正确的索引对性能都毫无益处:在表上建立的每个索引都会增加存储开销,索引对于插入、删除、更新操作也会增加处理上的开销。 另外,过多的复合索引,在有单字段索引的情况下,一般都是没有存在价值的;相反,还会降低数据增加删除时的性能,特别是对频繁更新的表来说,负面影响更大。
总的来说,小型表肯定不建索引,
或者数据库记录在亿条数据级以上,还是建议使用非关系型数据库。
还有些特殊字段的数据库,比如BLOB,CLOB字段肯定也不适合建索引。
其实这个问题更感觉偏向于做软件项目的一种经验。

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

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

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

其次,我们知道,在建立索引的时候要对表进行全表的扫描工作,因此,应当考虑调大初始化参数db_file_multiblock_read_count的值。一般设置为32或更大。

再次,建立索引除了要进行全表扫描外同时还要对数据进行大量的排序操作,因此,应当调整排序区的大小。

最后,建立索引的时候,可以加上nologging选项。以减少在建立索引过程中产生的大量redo,从而提高执行的速度。

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

设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率。设计MySql索引的时候有一下几点注意:

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

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

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

    3,索引不会包含有NULL值的列

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

    对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的 列,如果在前10 个或20 个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

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

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

    7,不要在列上进行运算





信息,获取主库信息连接主库

文件,获取到上次执行到的 relay-log 的位置,作为起点,回放 relay-log



信息,获取主库信息连接主库

文件,获取到上次执行到的 relay-log 的位置,作为起点,回放 relay-log

控制 binlog 从内存写入磁盘的控制开关

每次事务提交都立即刷新 binlog 到磁盘(双一标准中的其一)

每次事务提交不立即写入磁盘,靠操作系统判断什么时候写入

2 dump 线程多导致的,系统资源压力大,由于传送日志是串行的。

由于超大事务存在,由于是串行工作,会阻塞后续其他事务的传送。

事务量大(主库压力大)

从库 默认只有一个 SQL 线程,串行回放事务。在主库有并发事务量大,或者有超大事务时,都会导

致 SQL 延时较严重。

5.6 版本,加入了 GTID 特性,所以支持了并发 SQL 特性,基于不同库实现并行回放事务

5.7 版本,GTID 功能进行了升级,可以通过 Logical_clock 模式,实现事务级别的多 SQL 线程的回

放。我们把这种复制模式叫做 MTS。

1.5.3.13 Mysql的binlog格式有哪些,默认的是什么格式,格式选取的标准是什么

每一条会修改数据的 sql 语句会记录到 binlog 中。优点是并不需要记录每一条 sql 语句和每一行的数

据变化,减少了 binlog 日志量,节约 IO,提高性能。缺点是在某些情况下会导致 master-slave 中的

不记录每条 sql 语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现

某些特定情况下的存储过程、或 function、或 trigger 的调用和触发无法被正确复制的问题。缺点是

会产生大量的日志,尤其是 alter table 的时候会让日志暴涨。

无法复制的操作使用 ROW 模式保存 binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。

1.5.3.14 Mysql主从是否同步,要在主库上查看还是从库上查看,主要关注哪些参数

1.5.3.16 用哪个命令可以对Mysql中的数据库进行备份?

--databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump 把第一个名字参数作为数据库

名,后面的作为表名。使用该选项,mysqldum 把每个名字都当作为数据库名。

-d: 只导出数据库的表结构

-t: 只导出数据库的数据

1.5.3.17 mysql的binlog有几种,区别是什么?mysql双主复制原理是什么?有什么优点和缺点?mysql如何进行增量备份?

条数据被修改了,修改成了什么样子了。

binlog,MySQL 会根据执行的 SQL 语句选择日志保存方式。

双向的主从复制,也就是互为对方的从服务器,每台服务器即是对方的主服务器,又是对方的从服

1:主服务器凡运行语句,都产生一个二进制日志 binlog

作为经常和 MySQL 打交道的数据分析师,必须来答!

关于 MySQL 的书籍还是不少的,我在这推荐一些我觉得不错的,从入门到进阶应有尽有!

对于 MySQL 来说,它的入门就是去学习 SQL 语法的过程。

这个时候就很简单,只需要买本书,然后看一下,最后就是找些练习题来训练,巩固自己的知识。

这个入门过程我建议就是一鼓作气,拿出一段连续的时间,进行高强度的学习,那大概 5 ~ 7 天就差不多。

当然前提就是“足够多的时间”且“学习效率在一般及以上”。

从入门到进阶,这个时间段才是需要花时间去精进的,这个阶段也比入门阶段更难,因为我们需要去了解它的底层实现原理。

下面我就分别来推荐一下,记得先帮我 点赞收藏,回头儿再看不迷路~

我在上面说过,MySQL 入门,主要还是对 SQL 语法的学习。

对于入门来说,我这里推荐两本书:《SQL 基础教程》、《SQL 必知必会》

这两本书的顺序呢,我建议是先《SQL 基础教程》

这本书介绍的节奏的更加平缓,并且用图示和关键字加粗更加生动地介绍知识,适合零基础的学生。

对于零基础的朋友来说 Mick 的《SQL 基础教程》更容易看懂学会,非常适合入门者学习。

看完《SQL 基础教程》以后,可以快速的翻阅 《SQL 必知必会》,其实这就是个查漏补缺和复习巩固的作用。

当然《SQL 必知必会》也可以不看,只是个可选项。

推荐这本书的原因呢,是《SQL 必知必会》有专门的练习平台供大家立马练习。只要有练习平台我都会吹爆!

前期都不需要在自己的电脑上安装 MySQL,只需要在这个学习的过程中,以及学完知识之后的时间里,就在一些在线的刷题网站上使劲练习,大量的练。

至于去哪练习,当然有很多的在线练习 SQL 的网站,我找了 6 个比较好的,推荐给大家,直接看下面的文章就好了!

在这个阶段的后期你可以尝试在电脑上安装 MySQL 了,当然软件的安装的过程中可能碰到很多玄学的事情。

这里推荐个视频给大家,知乎上直接可以看:

有些同学在学习之初就是喜欢看视频学,那其余的数据库介绍啊数据库操作啊等内容可以也顺便看看,差不多看到第 21 集就可以了:

MySQL 进阶阶段,我们要开始了解它底层实现原理。

这就和入门阶段不一样了,比较难且需要花的时间较多。

如果只是学完基础来看设计到底层实现的大部头,估计也会直接劝退了。

这里可以先看这本《MySQL 是怎样运行的》,用比较搞笑的方式对 MySQL 的底层运行原理进行了介绍,此外还带了很多的配图更加容易理解,从根儿上理解 MySQL。

前面的部分的“基础篇”可以快速略过,重点的就是后面的“开发篇和优化篇”。

尤其是后面的“优化篇”对我帮助很大,学习了一些常见的 MySQL 优化方式。

毕竟数据库性能优化是对我们来说很重要的一趴。

MySQL 中用的做多的就是 InnoDB 引擎,所以更进一步学习 InnoDB 存储引擎很有必要。

这本书反正就是 MySQL 中的经典书,解析了 InnoDB 的体系结构、实现原理、工作机制,里面呆了大量的实践内容。

MySQL 不老的经典大部头,这个大家就放在最后看好了。

这本书好的方面是,每一章都是相对独立的主题,大家可以根据目录选择性的阅读。

我记得当时我主要就是看了创建高性能的索引、查询性能优化这几个章节,不得不说:Nice!

说实话,现在网上的推荐这么多,有多少人是能跟着做下来的。

希望大家多多思考,能够静下心来好好去学,而不是收藏了就是会了。

祝大家早日学会 SQL,早日修成大佬!

相信下面的这些回答对你也会有帮助:

我要回帖

更多关于 mysql添加索引命令 的文章