我有一个存储有关50K行,这里是我的查询表:在mysql中使用where子句时,我应该使用索引吗?
select * from video where status = 1 and filter = 1 and category = 4
这些列TINYINT而且我不知道我应该在这些列上做索引?
我有一个存储有关50K行,这里是我的查询表:在mysql中使用where子句时,我应该使用索引吗?
select * from video where status = 1 and filter = 1 and category = 4
这些列TINYINT而且我不知道我应该在这些列上做索引?
不!
您应该始终考虑索引选择性!如果索引上的where子句的结果将返回超过表的20%,那么该索引不会被使用,但会被忽略。
因此,例如,您的视频的状态将是1,2,3,那么你有3个可能的状态。如果这些指数分布均匀,我们可以认为其中有33.3%是适合的。随后,查询:
select * from video where status = 1
将不使用索引!相反,将使用FULL TABLE SCAN。
请仔细阅读。这真的很重要,也是一个常见的错误。
我肯定会使用索引。他们使选择更快。但是如果有很多插入表格的话,我会再想一想。插入语句上的索引会增加很多重载,并且插入语句会很慢,因为每次插入时都必须重新构造索引。
如果您创建此查询的索引,试图(status, filter, category)
(顺序可能会有所不同)。
但这取决于您的表格行的百分比是多少。最小的百分比,您的查询将使用索引运行得越好。正如santiagobasulto指出的那样,如果索引选择性不高,那么索引将不会用于查询,但会对表进行全面扫描。