Mysql大表加索引

Mysql大表加索引,第1张

select (*) from tb_name where create_time >xxx

最终得知是因为这个表数据行数已经超过 一千万了,然后create_time字段又没有索引

那解决办法肯定是加索引喽。

但是这个表是一直在线上运行,很重要和业务部分。如果给千万级的大表在线加索引 ,肯定会卡死。

然后就搜罗了一大筐解决方案,比如 在线无锁加索引使用

ALTER TABLE tbl_name ADD PRIMARY (column), ALGORITHM=INPLACE, LOCK=NONE

后来才发现,这个特性是 Mysql 5.6 以后才支持,然而我们的mysql用的是5.5版本

最后在 《高性能Mysql》一书中看到,可在通过 “影子拷贝”来解决,

就是 先创建一张和源表无关的新表,然后通过重命名和删表 *** 作交换两张表;

当给新表加完索引后,最上面那条查询直接就是0.0002s

场景:在给一张有几万条记录的表添加索引时,进度非常慢,导致其它查询无法进行

处理方式:

使用Navicat的命令行模式,执行以下命令:

show processlist

这时会看到有哪些线程正在执行,也可以查看锁表的线程。你会发现alter table * add key ****那个线程状态是Waiting for table metadata lock,后面有个这个表的所有 *** 作都是这个状态,很明显是这条加索引的语句把表给锁了。

查看线程ID,执行

kill 线程ID

这样被锁住的表就能立即被使用了。

由此得出一个结论,当一张表数据量很大时,不要轻易添加索引,会导致表被锁死!如果非要添加,那么应该先把数据表进行备份,然后进行空表添加索引。

只能通过ALTER TABLE不能create index

参数说明:

在“索引”选项卡,只需简单地点击索引栏位来编辑。使用索引工具栏,可以创建新的、编辑或删除选定的索引栏位。

2

添加索引:添加一个索引到表。

删除索引:删除已选择的索引。

名编辑框:设置索引名。

3

索引包含栏位的 *** 作:双击“栏位”或点击编辑图标打开编辑器进行编辑,从列表中选择栏位。从索引中移除栏位,以相同的方式取消勾选即可。也可以用箭头按钮来改变索引栏位排序。“子部分”编辑框用来设置栏位的键长度。

温馨提示:一些数据类型不容许由多个栏位索引,例如BLOB。

4

索引类型:定义表索引的类型。

NORMAL索引是最基本的索引,并没有限制,如唯一性。

UNIQUE索引和NORMAL索引一样,只有一个差异,即索引列的全部值必须只出现一次。

FULL

TEXT索引用于MySQL全文搜索。

5

索引方法:当创建索引时指定索引类型,BTREE

HASH。

注释:设置任何可选的文本描述当前索引。适用于

MySQL

5.5.3

或以上版本。

6

以上是MySQL

MariaDB

表索引的相关内容,掌握了以上知识点,对表索引便有了初步的了解。

方法/步骤

我们首先打开mysql的客户端管理工具 Navicat

在客户端管理工具连接上数据库后,点击选中要修改的库。然后点击‘Tables’来打开表视图。

打开后在右边找到要修改的表,右键点击这个表然后点击‘Design Table’(设计表)

打开后,在这里点击上方的‘Indexes’,也就是索引。

现在该表的索引为空,我们点击下方的+号图标来添加一个。

在这里先输入索引名称,然后点击这个按钮来选择列,看是对哪一列进行索引。

点击后就会d出窗口,在这里会列出这个表的所有列,我们在这里选择'name’,即是对这个name列进行索引的。

最后选择索引的类型,我们在这时选择全文索引,一般对字符串的索引都是选择这个的。

设置好后,点击保存按钮,或快捷键ctrl+s保存就行了。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11445646.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存