mysql创建索引的注意事项

当mysql数据库表的数据超过百万,甚至千万的时候,where查询通常需要几秒的时间。但是如果索引创建适当,where查询也能毫秒级完成。下面分享下我在使用mysql方面的一些经验。

1,mysql索引的优点和弊端

优点:使有几千万数据表格的where查询在毫秒内完成。

缺点:索引太多,进行表格修改操作(insert,update,delete)的时候速度会有影响,因为更新表的同时,需要更新索引。所以创建索引时要注意,不要滥用索引。

2,根据程序的sql语句来创建索引

示例1:需要从一个有几千万用户的mysql表中按照用户名查找用户信息。

sql语句:SELECT * FROM USER WHERE username=”markli”

索引的创建:如下

mysql创建索引
sqlyong为数据库创建索引

针对这个语句,只需要为“username”创建一个索引即可。这样即可实现查询毫秒完成。

示例2:需要从一个几千万用户的mysql表中根据用户名和密码查询用户

sql语句: SELECT * FROM USER WHERE username=”markli” AND PASSWORD=”123456″ LIMIT 1

虽然在示例1中为“username”创建了索引,但是此查询同时需要判断“username”和“password”字段。速度提升并不明显,所以需要再创建一个包含 “username”和“password”两个字段的索引。如下图:

mysql创建包含多个字段的索引
创建包含多个字段的索引

现在问题来了:如果只创建了一个包含“username”和“password”两个字段的索引,使用示例1的语句只查询“username”在千万级数据的表中能否毫秒完成?经过我的测试,答案是不行。此时需要单独为“username”创建一条索引。

所以得出的结论:需要针对每条sql语句创建优化索引。在设计数据库表和写程序的时候要综合考虑。