mysql 大表添加索引注意事项

LINXU top命令:
[url]http://www.cnblogs.com/ggjucheng/archive/2012/01/08/2316399.html[/url]
我的表记录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
以下是添加普通索引内存的使用情况

[img]http://dl2.iteye.com/upload/attachment/0118/8939/0e4efff6-f2be-35f8-a751-9343fde7f4a7.png[/img]
开始有2.8G左右

[img]http://dl2.iteye.com/upload/attachment/0118/8941/324f11bc-3855-33a8-9b4e-0f748c44a29f.png[/img]
处于稳定是还有800M
以下为磁盘使用情况:
[img]http://dl2.iteye.com/upload/attachment/0118/8943/b8cf48ca-2ee2-3201-a69a-1a958979303e.png[/img]


开始有18G
[img]http://dl2.iteye.com/upload/attachment/0118/8945/0b527c80-5f55-323e-9c13-2db7836a8d8d.png[/img]

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

你可能感兴趣的:(MySQL)