该表包含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,我是否应该更改? 谢谢。
答案 0 :(得分:3)
status
上的索引不太可能提高SELECT性能,因为列内容不够多样化。由于列内容非常多样化,userid
上的索引很可能会提高性能。
当您将userid
列定义为unique
后,您的查询中应该已经使用了自动创建的唯一索引。因此,无需定义其他索引。
答案 1 :(得分:0)
我建议删除id列(合成键 - 它的用途是什么?)。比,制作user_id(第一个)和状态(第二个)的累积PK。
更好的解决方案 - 从PK中删除状态并仅选择user_id。检查应用程序中的状态并抛出404或其他任何内容。