Mysql 第二列基数较低的复合索引是否会对性能产生足够的影响,因此应该使用它? 安装程序
我在Rails中使用单表继承(STI),简化如下:Mysql 第二列基数较低的复合索引是否会对性能产生足够的影响,因此应该使用它? 安装程序,mysql,sql,ruby-on-rails,indexing,Mysql,Sql,Ruby On Rails,Indexing,我在Rails中使用单表继承(STI),简化如下: class Vehicle belongs_to :user end class Car < Vehicle end class Plane < Vehicle end 使用索引时,维护索引(单列或多列)的成本几乎总是被性能改进所抵消。这是每个插入/删除的一个小增量,如果通过更新更改索引字段的值,则会增加成本。(更新这种情况很少见。)因此,不要担心“维护复合索引”的成本 需要索引(用户id,类型) 优化器将 发现该索引是一
class Vehicle
belongs_to :user
end
class Car < Vehicle
end
class Plane < Vehicle
end
使用索引时,维护索引(单列或多列)的成本几乎总是被性能改进所抵消。这是每个
插入
/删除
的一个小增量,如果通过更新
更改索引字段的值,则会增加成本。(更新这种情况很少见。)因此,不要担心“维护复合索引”的成本
需要索引(用户id,类型)
优化器将
(类型,用户id)
,这意味着有时可能会有多个类型的值
如果表中的所有行都有type='Car'
,则没有问题。我所说的一切仍然适用。包含不必要的类型
的浪费是微不足道的
最好先在索引中包含所有“=”列,然后最多包含一个其他字段 我删除了Postgres标记,因为语法是MySQL。对此我很抱歉。与Postgres相比,哪一部分使其具有MySQL特定性?虽然我目前正在使用MySQL,但我更感兴趣的是一个非特定于供应商的答案。回击是一种赠品。哈哈,谢谢,我想我已经很久没有优化Postgres了,我忘了。
SELECT `vehicles`.* FROM `vehicles` WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10
WHERE `vehicles`.`type` IN ('Car')
AND `vehicles`.`user_id` = 10