精华内容
下载资源
问答
  • 2022-04-07 08:09:54

    1.添加PRIMARY KEY(主键索引)
    mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )

    例:alter table yx_marketing_details add index(id);

    2.添加UNIQUE(唯一索引)
    mysql>ALTER TABLE `table_name` ADD UNIQUE (`column`)

    3.添加INDEX(普通索引)
    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column` )

    4.添加FULLTEXT(全文索引)
    mysql>ALTER TABLE `table_name` ADD FULLTEXT ( `column`)

    5.添加多列索引
    mysql>ALTER TABLE `table_name` ADD INDEX index_name ( `column1`, `column2`, `column3` )

    更多相关内容
  • mysql加索引,数据库卡死

    万次阅读 2019-01-17 10:16:59
    通过sql日志看到主要是由于慢查询引起的,通过explain这个sql,发现主要是由于这个SQL没有命中索引,进行了全表扫描,慢是肯定了的。 为了优化这个页面,主要想到了从以下方法进行解决: 1)重写Sql,让查询命中...

    公司的一个内部项目,由于突然导入了几十万的数据,数据量翻了一倍,导致了某个页面打开很慢。通过sql日志看到主要是由于慢查询引起的,通过explain这个sql,发现主要是由于这个SQL没有命中索引,进行了全表扫描,慢是肯定了的。

    为了优化这个页面,主要想到了从以下方法进行解决:

    1)重写Sql,让查询命中索引

    2)增加索引

    3)1)或者2)方法之后,再加上一个缓存功能

    最快捷的方式肯定是2了,但是本表由于逻辑复杂,时不时又批量录入一些数据,已经有了5个索引了,再加索引,恐怕会导致写入慢的问题,而且加索引可能会引起锁表问题。

    于是,我先想用方法1解决,可是由于逻辑有点复杂,查询语句比较复杂,改了很多写法都不理想,最后还是选择了方法2,直接表加索引。

    由于对于加索引的一些担忧,于是我在本地先尝试了一下(本地数据和线上数据量基本一致,相差不大),结果没想到还挺快的,对于写入的性能也没多大的影响。加入索引后页面秒开,效果很好。

    于是,在晚上的时候,到线上去加索引。结果。。。。悲剧发生了,那张表果然被锁死了,由于那张表还是一张很重要的表,很多业务都跟那张表挂钩,导致很多服务都用不上了。

    可是表锁死了,也不能做啥操作,怎么办呢?还好有show processlist,可以查看哪些线程正在执行,也可以查看锁表的线程。

    结果,发现alter table * add key ****那个线程状态是Waiting for table metadata lock,后面有个这个表的所有操作都是这个状态,很明显是这条加索引的语句把表给锁了。

    查看线程的id,然后kill id号把这个线程杀死。

    果然,杀死了,这张表立马就可以用了。

    所以,当数据量较大的时候,不要随便加索引,会导致表锁死的。

    无奈,只能选择另外的方式解决那个慢查询的问题了。

     

    展开全文
  • 你的mysql加索引了吗

    万次阅读 2020-01-13 11:39:21
    阿里云RDS增加索引优化11日前后对比 增加索引前后mysq CPU/内存利用率对比 增加索引前后mysq存储空间使用量(MB)使用对比 InnoDB Redo 写次数 增加索引前后InnoDB Row Operations对比 增加索引前后...

    前言

    最近阿里云服务提示mysql内存使用量超过90%,并且用户反馈出现服务超时的情况,针对这一现象,我们对mysql进行了优化,主要是增加了索引,优化后cpu降下去了,用户好评上来了,问题得到完美解决。合理使用索引的性能如同磁悬浮列车,未使用索引的性能如同绿皮火车。

    阿里云RDS增加索引优化11日前后对比


    增加索引前后mysq CPU/内存利用率对比

    CPU/内存利用率
    CPU/内存利用率

    增加索引前后mysq存储空间使用量(MB)使用对比

    存储空间使用量(MB)存储空间使用量(MB)

    InnoDB Redo 写次数

    InnoDB Redo 写次数

    增加索引前后InnoDB Row Operations对比

    InnoDB Row Operations
    InnoDB Row Operations

    增加索引前后InnoDB Buffer Pool 请求次数对比

    InnoDB Buffer Pool

    InnoDB Buffer Pool
    InnoDB Buffer Pool
    在这里插入图片描述

    增加索引前后执行次数对比

    执行次数执行次数执行次数

    增加索引前后InnoDB Data 读写吞吐量(KB)对比

    InnoDB Data 读写吞吐量(KB)
    InnoDB Data 读写吞吐量(KB)InnoDB Data 读写吞吐量(KB)

    增加索引前后流量吞吐(KB)对比

    流量吞吐(KB)

    增加索引前后临时表数量对比

    临时表数量

    增加索引前后流量吞吐(KB)对比

    流量吞吐(KB)

    增加索引前后TPS/QPS对比

    TPS/QPS
    TPS/QPS

    增加索引前后会话连接对比

    会话连接
    会话连接

    展开全文
  • MySQL添加索引的五种方法

    千次阅读 2022-04-27 10:51:52
    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行...

           索引(Index)是帮助MySQL高效获取数据的数据结构。MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

          数据库查询是数据库的最主要功能之一。我们都希望查询数据的速度能尽可能的快,因此数据库系统的设计者会从查询算法的角度进行优化。最基本的查询算法当然是顺序查找(linear search),这种复杂度为O(n)的算法在数据量很大时显然是糟糕的,好在计算机科学的发展提供了很多更优秀的查找算法,例如二分查找(binary search)、二叉树查找(binary tree search)等。如果稍微分析一下会发现,每种查找算法都只能应用于特定的数据结构之上,例如二分查找要求被检索数据有序,而二叉树查找只能应用于二叉查找树上,但是数据本身的组织结构不可能完全满足各种数据结构(例如,理论上不可能同时将两列都按顺序进行组织),所以,在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式引用(指向)数据,这样就可以在这些数据结构上实现高级查找算法。这种数据结构,就是索引。

    1.添加primary key(主键索引)
    alter   table  表名   add  primary   key(列名);

    2.添加unique(唯一索引)
    alter  table  表名  add  unique(列名);

    3.添加index(普通索引)
    alter  table  表名  add  index  索引名(index_name)  (列名);

    4.添加fulltext(全文索引)
    alter  table  表名  add  fulltext  (列名);

    5.添加多列索引
    alter  table  表名  add  index  索引名(index_name)  (列名1,列名2.......);

    当不再需要索引时,可以使用 DROP INDEX 语句 或 ALTER TABLE 语句来对索引进行删除。
    1.使用 DROP INDEX 语句
    语法格式:
    DROP INDEX <索引名> ON <表名>

    语法说明如下:
    <索引名>:要删除的索引名。
    <表名>:指定该索引所在的表名。

    2.使用 ALTER TABLE 语句
    根据 ALTER TABLE 语句的语法可知,该语句也可以用于删除索引。具体使用方法是将 ALTER TABLE 语句的语法中部分指定为以下子句中的某一项。
    DROP PRIMARY KEY:表示删除表中的主键。一个表只有一个主键,主键也是一个索引。
    DROP INDEX index_name:表示删除名称为 index_name 的索引。
    DROP FOREIGN KEY fk_symbol:表示删除外键。
    注意:如果删除的列是索引的组成部分,那么在删除该列时,也会将该列从索引中删除;如果组成索引的所有列都被删除,那么整个索引将被删除。

    删除索引
    【实例 1】删除表 tb_stu_info 中的索引,输入的 SQL 语句和执行结果如下所示。
    mysql> DROP INDEX height
        -> ON tb_stu_info;
    Query OK, 0 rows affected (0.27 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    mysql> SHOW CREATE TABLE tb_stu_info\G
    *************************** 1. row ***************************
           Table: tb_stu_info
    Create Table: CREATE TABLE `tb_stu_info` (
      `id` int(11) NOT NULL,
      `name` char(45) DEFAULT NULL,
      `dept_id` int(11) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `height` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312
    1 row in set (0.00 sec)

    【实例 2】删除表 tb_stu_info2 中名称为 id 的索引,输入的 SQL 语句和执行结果如下所示。
    mysql> ALTER TABLE tb_stu_info2
        -> DROP INDEX height;
    Query OK, 0 rows affected (0.13 sec)
    Records: 0  Duplicates: 0  Warnings: 0
    mysql> SHOW CREATE TABLE tb_stu_info2\G
    *************************** 1. row ***************************
           Table: tb_stu_info2
    Create Table: CREATE TABLE `tb_stu_info2` (
      `id` int(11) NOT NULL,
      `name` char(45) DEFAULT NULL,
      `dept_id` int(11) DEFAULT NULL,
      `age` int(11) DEFAULT NULL,
      `height` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=gb2312
    1 row in set (0.00 sec)

    展开全文
  • mysql 添加索引语句

    千次阅读 2021-01-25 12:23:22
    1.PRIMARYKEY(主键索引)mysql>ALTERTABLE`table_name`ADDPRIMARYKEY (`column`)2.UNIQUE(唯一索引)mysql>ALTERTABLE`table_name`ADDUNIQUE (`column` )3.INDEX(普通索引)mysql>ALTERTABLE`...
  • mysql怎么添加索引

    千次阅读 2021-02-08 09:03:52
    mysql中可以通过使用alter table这个SQL语句来为表中的字段添加索引。1、添加PRIMARY KEY(主键索引)mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )2、添加UNIQUE(唯一索引)mysql>ALTER TABLE...
  • mysql如何添加索引

    千次阅读 2021-01-19 04:23:21
    mysql添加索引的方法:可以通过【create table】语句来添加,如【CONSTRAINT PRIMARY KEY | INDEX [] [] 】,表示创建一般索引。在mysql中可以在创建表(CREATE TABLE)的同时创建索引;也可以在创建表后创建索引,...
  • MySQL添加索引导致表死锁问题

    千次阅读 2022-04-01 15:39:35
    MySQL有三种锁的级别:页级、表级、行级。 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发...
  • 【数据库】mysql哪些字段适合加索引

    千次阅读 2021-02-03 15:36:07
    数据库中字段适合添加索引的有表中某个字段值离散度越高越适合,占用存储空间少的字段,存储空间固定的字段,where子句中经常用到的字段等1、表的...数据库用户创建主键约束的同时, MySQL 自动创建主索引( prima...
  • mysql添加索引,查询反而变慢

    千次阅读 2021-03-03 21:35:20
    1.表结构,time1添加普通索引:CREATE TABLE `time_table` (`time1` INT(11) NULL DEFAULT NULL,`time2` INT(11) NULL DEFAULT NULL,INDEX `time1` (`time1`))ENGINE=MyISAM;2.蠕虫复制创建200万条数据insert into ...
  • mysql索引详解

    万次阅读 多人点赞 2021-07-07 21:40:09
    一、MySQL三层逻辑架构 MySQL的存储引擎架构将查询处理与数据的存储/提取相分离。下面是MySQL的逻辑架构图: 一、对比InnoDB与MyISAM 1、 存储结构 MyISAM:每个MyISAM在磁盘上存储成三个文件。分别为:表定义...
  • mysql添加索引导致表锁死

    千次阅读 2021-08-13 17:12:35
    你会发现alter table * add key ****那个线程状态是Waiting for table metadata lock,后面有个这个表的所有操作都是这个状态,很明显是这条加索引的语句把表给锁了。 查看线程ID,执行 kill 线程ID 这样被锁住...
  • mysql添加索引语句

    万次阅读 2019-04-10 10:38:30
    1.添加PRIMARY KEY(主键索引mysql>ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.添加UNIQUE(唯一索引) mysql>ALTER TABLE `table_name` ADD UNIQUE ( `column` ) 3.添加INDEX(普通索引) ...
  • MySQL索引分类及创建原则

    千次阅读 2022-03-19 16:05:58
    一、索引分类。 ​ 编辑 切换为居中 添加图片注释,不超过 140 字(可选) 普通索引:添加普通的索引不会对原来的列产生任何影响,该索引只用来提高查询效率(该列是否非空,是否唯一由列本身的约束条件约束)。 ...
  • Mysql添加索引

    千次阅读 2019-06-19 10:10:47
    添加索引是为了提高数据库查询性能,索引是最物美价廉的东西了,不用内存,不用改程序,不用调sql,只要执行个正确的create index ,查询的速度就可能提高百倍千倍,这可是有诱惑力的,可是天下没有没费的午餐,...
  • mysql用了索引为什么还是查询很慢?

    千次阅读 2022-02-13 15:31:06
    这里的设计是1亿人中有600万人姓“张”,所以虽然索引选择性相对较差,但是MySQL认为还是可以用索引MySQL5.6之后做的优化:index condition pushdown,优化了回表数量级 mysq5.6以前,基于左侧列对600万张回表筛选...
  • 创建和删除索引索引的创建可以在CREATE TABLE语句中进行,也可以单独用CREATE INDEX或ALTER TABLE来给表增加索引。删除索引可以利用ALTER TABLE或DROP INDEX语句来实现。(1)使用ALTER TABLE语句创建索引。语法如下:...
  • MySQL建立索引的注意事项

    千次阅读 2020-06-22 17:22:48
    大家都知道对数据库表字段建立索引可以有效的提升数据的查询效率,但索引也不是随便建立的,需要我们对建立索引的规范有一定的了解,才能更好的发挥出索引的优势,避免因为滥建索引反而带来整体性能的下降。...
  • mysqlmysql时间字段怎么加索引

    千次阅读 2021-02-02 16:12:26
    查出5万条结果大约需要4.5秒,这个字段已经了普通索引,但是explain的类型还是ALL。怎么优化?语句是between and。换了>=和<=查询需要的时间也差不多。SELECT id,name,sex,city,headimg FROM user WHERE ...
  • MySQL 加索引 字段 锁表问题 线上数据库 用的是阿里云 版本是5.6的 前两天 给文章表某个字段注释 表竟然锁死了 (后来杀掉进程才恢复) 今天 给一张有4W条记录的表唯一索引 也锁死了 卡了大约30分钟 也没执行...
  • Mysql 建立索引之后反而变慢(已解决) 记录一个神奇的问题,解决方法分享给大家,碰到类似问题,可以试试这种方法。 SQL查询背景 需要优化建索引的表为 FEDERATED 引擎(远程表) 数据库1(服务器1)关联 数据库2...
  • mysql组合索引与字段顺序

    千次阅读 2019-06-11 17:15:25
    很多时候,我们在mysql中创建了索引,但是某些查询还是很慢,根本就没有使用到索引!一般来说,可能是某些字段没有创建索引,或者是组合索引中字段的顺序与查询语句中字段的顺序不符。 看下面的例子: 假设有一张...
  • MySQL 添加索引,删除索引及其用法

    万次阅读 多人点赞 2019-04-18 10:34:39
    一.索引的作用 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出... 在数据量和访问量不大的情况下,mysql访问是非常快的,是否加索引对访问影响...
  • mysql新增索引不锁表

    千次阅读 2020-02-19 16:10:04
    以前每次更新索引 都要十多分钟 后来同事告诉了我一个方法 更新索引不影响查询 我试了一下 还真不锁表 我测试的mysql版本 5.6.27 方法:ALTER TABLE tableName ADD INDEX index_column (column1,column2), ALGORITHM...
  • mysql为什么加索引就能快

    千次阅读 2019-04-22 09:55:09
    平时我们要优化 mysql 查询效率的时候,最常见的就是给表加上合适的索引了,那今天就来聊聊为什么索引就快了呢。 很多人会说索引就相当于一本书的目录,通过目录来找书中的某一页,确实是很快的,如果没有...
  • mysql添加索引和不添加索引的区别

    千次阅读 2020-01-01 21:20:46
    因此知道时间都花在了时间过滤的动作上,于是对trigger_time做了索引操作: ALTER TABLE xxl_job_log ADD INDEX index_job_time (trigger_time) 在使用explain查看select执行情况: 扫描范围:局部 ...
  • mysql添加索引命令

    千次阅读 2018-11-22 13:47:00
      ...ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) 2.UNIQUE(唯一索引)mysql&gt;ALTER TABLE `table_name` ADD UNIQUE (`column` ) 3.INDEX(普通索引)my...
  • mysql语句添加索引

    万次阅读 多人点赞 2019-01-08 15:33:03
    mysql索引学习----2----创建索引、修改索引、删除索引的命令语句 mysql语句添加索引 创建或添加索引可以使用如下语句。 一、使用ALTER TABLE语句创建索引。 语法如下: 1.PRIMARY KEY(主键索引)  mysql&...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 550,277
精华内容 220,110
关键字:

mysql加索引

mysql 订阅