MySQL索引性能…索引位置取决于状态
该表包含4列:id autoincrement、userid unique、like ssn、status TINYINT1、0或1值、notnull、user\u info varchar1000 如果出现以下情况,我是否应该在userid列上添加索引以提高性能: 30%的请求是MySQL索引性能…索引位置取决于状态,mysql,performance,indexing,Mysql,Performance,Indexing,该表包含4列:id autoincrement、userid unique、like ssn、status TINYINT1、0或1值、notnull、user\u info varchar1000 如果出现以下情况,我是否应该在userid列上添加索引以提高性能: 30%的请求是 "SELECT user_info from Table1 WHERE userid='1234567'"; 40%的请求是: "SELECT user_info from Table1 WHERE userid=
"SELECT user_info from Table1 WHERE userid='1234567'";
40%的请求是:
"SELECT user_info from Table1 WHERE userid='1234567' AND status=0";
"SELECT user_info from Table1 WHERE userid='1234567' AND status=1";
20%的请求是:
"SELECT user_info from Table1 WHERE userid='1234567' AND status=0";
"SELECT user_info from Table1 WHERE userid='1234567' AND status=1";
或者,有更好的方法来提高性能,我应该考虑以某种方式对状态列进行索引
如果不是30%、40%、20%,而是实际变为9%、90%、1%,即大多数请求的状态为0,我是否应该更改某些内容?
谢谢。状态索引不太可能提高SELECT性能,因为列内容不够多样化。基于userid的索引很可能会大大提高性能,因为列内容非常多样化
当您将userid列定义为unique时,应该已经在查询中使用自动创建的unique索引。因此无需定义额外的索引。由于列内容不够多样化,状态索引不太可能提高SELECT性能。基于userid的索引很可能会大大提高性能,因为列内容非常多样化
当您将userid列定义为unique时,应该已经在查询中使用自动创建的unique索引。因此,无需定义额外的索引。我建议删除id列合成键-它用于什么?。然后,首先对用户id进行累计PK,然后对状态进行累计PK
更好的解决方案-从PK中删除状态,并始终仅按用户id选择。检查应用程序中的状态并抛出404或任何东西。我建议删除id列合成键-它用于什么?。然后,首先对用户id进行累计PK,然后对状态进行累计PK
更好的解决方案-从PK中删除状态,并始终仅按用户id选择。检查应用程序中的状态并抛出404或其他任何内容。类似userid的表名意味着列是用户表id字段的外键。如果将其定义为InnoDB表上的外键,则会自动为其编制索引。关于索引fk的好信息:像userid这样的表名意味着列是用户表id字段的外键。如果将其定义为InnoDB表上的外键,则会自动为其编制索引。有关索引fk的详细信息: