mysql 大表添加索引注意事项

本文通过实际案例展示了在MySQL中如何添加主键和普通索引,并详细记录了索引创建过程中内存和磁盘资源的消耗情况。此外,还对比了建立索引前后查询性能的变化,揭示了以“%”开头的字符串匹配为何无法利用索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值