异想天开

What's the true meaning of light, Could you tell me why

mysql索引

日期:2014-05-29 15:57:37
  
最后更新日期:2014-05-29 16:00:02
发个补丁版本,登录服务器后台时,top一下,发现mysql的cpu占用率达到700%(服务器为8核),顿时吓尿了。本地连接mysql,show processlist查看连接线程,发现有多个线程在进行update操作,update操作的where里面是根据device_token(类型为字符串)唯一匹配,故用explain分析下查询: [code lang="cpp"]
mysql> explain select * from token10 where device_token='4412e414dee1a5cdb88bf4a87f779b99cf742ff964acd'\G;
*************************** 1. row ***************************
id: 1
select_type: SIMPLE
table: token10
type: ALL
possible_keys: NULL
key: NULL
key_len: NULL
ref: NULL
rows: 162393
Extra: Using where
1 row in set (0.37 sec)
[/code]
百度下对应字段的意思,索引都是NULL,也就是mysql会直接进行扫库操作,而找到该device_token大概需要扫162393行。show create table table_name表结构里面没有任何索引。因为device_token是唯一的,故直接写个脚本加上唯一索引,再次top一下立马cpu下降到40%。解决问题后,感叹还要多学习啊,现在关系数据库和非关系数据库发展这么迅速。应用的某种技术多些比对思维,多调研几种类似的技术,从开发度和控制驾驭能力上多考虑。这是后话。