我有一个非常简单的查询(表类型InnoDb),并EXPLAIN说MySQL必须做一个额外的传递,以找出如何按排序顺序检索行.
SELECT * FROM `comments`
WHERE (commentable_id = 1976)
ORDER BY created_at desc LIMIT 0, 5
Run Code Online (Sandbox Code Playgroud)
确切解释输出:
table select_type type extra possible_keys key key length ref rows
comments simple ref using where; using filesort common_lookups common_lookups 5 const 89
Run Code Online (Sandbox Code Playgroud)
commentable_id已编入索引.评论没有任何技巧,只是一个内容领域.
该手册表明,如果order by与where不同,则无法避免filesort.
http://dev.mysql.com/doc/refman/5.0/en/order-by-optimization.html
我也试过id和它的等价但是没有区别,即使我添加id作为索引(我理解这不是必需的,因为id在MySQL中隐式索引).
提前感谢任何想法!
标记 - 这是SHOW CREATE TABLE
CREATE TABLE `comments` (
`id` int(11) NOT NULL auto_increment,
`user_id` int(11) default NULL,
`commentable_type` varchar(255) default NULL,
`commentable_id` int(11) default NULL,
`content` text,
`created_at` datetime default NULL,
`updated_at` …Run Code Online (Sandbox Code Playgroud) 我正在挖掘一些有趣的代码,我确信这是错误的.我想知道是否有人想过开发人员试图使用的语法?
继承人的伪造代码:
render :nothing => true and return if params[:name].nil?
Run Code Online (Sandbox Code Playgroud)
我天真的修复暗示了我的编程语言背景:
if params[:name].nil?
render :nothing => true, :status => 404
return
end
Run Code Online (Sandbox Code Playgroud)
有更优雅,更像红宝石的方式吗?(分号不算:)
在Ruby中,有一个叫做Mash的真棒库,它是一个Hash但是通过巧妙地使用missing_method可以转换:
object['property']
Run Code Online (Sandbox Code Playgroud)
至
object.property
Run Code Online (Sandbox Code Playgroud)
这对模拟非常有用.有人知道Python中有类似的东西吗?