对于应用程序的索引页面,我需要从MySQL-DB中提取表中的所有条目。可以设置过滤器,但最初where子句是WHERE 1=1
。虽然返回了EXPLAIN
显示的预期结果,但没有使用索引,因此查询非常慢。
解决这个问题的最佳方法是什么?
编辑:
这是查询
SELECT
`Module`.`id`,
`Module`.`name`,
`Module`.`module_class_id`,
`Module`.`editor`,
`ModuleClass`.`name`,
`Editor`.`name`,
`ModuleClass`.`id`,
`Editor`.`id`,
`Mc`.`id`
FROM `Module`
LEFT JOIN `ModuleClass` ON (`Module`.`module_class_id` = `ModuleClass`.`id`)
LEFT JOIN `Editor` ON (`Module`.`editor` = `Editor`.`id`)
LEFT JOIN `Mc` ON (`Module`.`id` = `Mc`.`module_id`)
WHERE 1 = 1
GROUP BY `Module`.`id`
ORDER BY
`Module`.`id` DESC,
`ModuleClass`.`name` ASC,
`Editor`.`name` ASC
LIMIT 50
这是解释的结果:
并且是的:我确实理解db在这里使用索引并没有多大意义,但是因为这对我来说似乎是一个相当普遍的情况,我希望有一个最佳实践来面对这个问题< / p>
答案 0 :(得分:1)
在order by子句中使用索引。因此,如果ID是您的primary_index,则写入WHERE 1=1 order by ID