
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保存就行了。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)