mysql 大表添加索引注意事项

LINXU top命令:
http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html
我的表记录8674132,表大小大约2G;
添加主索引
ALTER TABLE USER ADD PRIMARY KEY (ID) ;
添加普通索引
ALTER TABLE USER ADD INDEX (NAME ) ;
添加索引的时候要缺确保内存足够,以我的来看,内存需要3G,磁盘需要4G,这只是保守估计
有时候添加索引的时候mysql会处理睡眠状态,得不到足够的CPU时间片
我们可以调整mysql进程的有限级
renice -20 15134
-20为nice值,15134为pid,进程的优先级PR我们是无法调整的可以通过nice来改变
PR(new) = PR(old) + nice
以下是添加普通索引内存的使用情况


开始有2.8G左右


处于稳定是还有800M
以下为磁盘使用情况:



开始有18G


处于稳定中还有14G
测试:
未建索引前:
SELECT * FROM USER WHERE NAME LIKE '西岸村大槎%'
耗时17.683s
建完索引后:
耗时0.010s
SELECT * FROM USER WHERE NAME LIKE '%西岸村大槎%'
耗时20.128s
从上可以得知: 以%开头的字符串匹配不适用索引;另外对于varchar建索引,null字符串能用到索引,所以一般不会影响效率和性能,相反的,在oracle上的索引,里不包含null值,所以如果你查 null的数据,就会用不到索引,会受到影响 。


猜你喜欢

转载自donald-draper.iteye.com/blog/2313304