Rails 2.3.5/MySQL密钥首选项问题;力指数

Rails 2.3.5/MySQL密钥首选项问题;力指数,mysql,ruby-on-rails,Mysql,Ruby On Rails,您好 我正在寻找一个相当“大…”的表,有几百万行,为了简单起见,该表如下所示 create table data ( user_id int ... created_on datetime ... ... key (user_id), key (created_on) ... ) engine = InnoDB; 所以,在一个问题上。。。从数据中选择*,其中用户id=X,创建的日期=Y 查询优化器更喜欢创建用户id,现在我可以使用强制索引来“强制”问题,但我

您好

我正在寻找一个相当“大…”的表,有几百万行,为了简单起见,该表如下所示

create table data (
   user_id int ...
   created_on datetime ...
   ...
   key (user_id),
   key (created_on)
   ...
) engine = InnoDB;
所以,在一个问题上。。。从数据中选择*,其中用户id=X,创建的日期=Y

查询优化器更喜欢创建用户id,现在我可以使用强制索引来“强制”问题,但我不想对每个Data.find和其他查询(数百个更改)都这样做

我是否可以影响Rails 2.3.5在可能的情况下全局使用“数据力索引(用户id_索引)”(并且没有其他矛盾;即手动输入另一个力索引)

我可以在更手动的基础上更改mysql查询优化器首选索引的方式吗?我已经看过运行分析表数据;但是查询计划没有改变


-daniel

创建复合索引
user\u id+created\u on
而不仅仅是
user\u id
,一切都会好起来。

没有主键吗?pitty浪费你唯一的innodb聚集索引。@f00:还有一个补充:如果PK单调增长,innodb会更好。我想到了这一点,但是alter table的停机时间相当长,我不想仅仅为了这个而进行从/主交换。@Daniel:这是解决你问题的唯一方法。你可以自由地按照正确的方式或试图找到一些肮脏的黑客。如果你不想交换,那么这个问题对你来说并不重要,算了吧;-)嗯,我在想可能有一些肮脏的把戏直接改变排序规则。。。说“on Data set collation=5 where index=“created_on_index”,这样我就可以影响query planner的构建方式。这不是一个好的长期解决方案,但在下一个计划的停机时间窗口之前,这将是一个好办法。