MySQL索引性能...... WHERE上的索引取决于状态

时间:2011-11-12 17:54:12

标签: mysql performance indexing

该表包含4列:id(自动增量),userid(唯一,如ssn),status(TINYINT(1),0或1值,非NULL),user_info(varchar(1000))。

我是否应该在userid列上放置索引以提高性能,如果: 30%的请求是

"SELECT user_info from Table1 WHERE userid='1234567'";

40%的请求是:

"SELECT user_info from Table1 WHERE userid='1234567' AND status=0";

20%的请求是:

"SELECT user_info from Table1 WHERE userid='1234567' AND status=1";

或者,有一种更好的方法来提高性能(我应该考虑以某种方式索引状态列)?

如果代替(30%,40%,20%)而实际变为(9%,90%,1%),即大部分请求是针对状态= 0,我是否应该更改? 谢谢。

2 个答案:

答案 0 :(得分:3)

status上的索引不太可能提高SELECT性能,因为列内容不够多样化。由于列内容非常多样化,userid上的索引很可能会提高性能。

当您将userid列定义为unique后,您的查询中应该已经使用了自动创建的唯一索引。因此,无需定义其他索引。

答案 1 :(得分:0)

我建议删除id列(合成键 - 它的用途是什么?)。比,制作user_id(第一个)和状态(第二个)的累积PK。

更好的解决方案 - 从PK中删除状态并仅选择user_id。检查应用程序中的状态并抛出404或其他任何内容。