MySQL查询与空WHERE - 索引优化

时间:2013-06-11 10:02:14

标签: mysql database indexing

对于应用程序的索引页面,我需要从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

这是解释的结果: screenshot of explain query

并且是的:我确实理解db在这里使用索引并没有多大意义,但是因为这对我来说似乎是一个相当普遍的情况,我希望有一个最佳实践来面对这个问题< / p>

1 个答案:

答案 0 :(得分:1)

在order by子句中使用索引。因此,如果ID是您的primary_index,则写入WHERE 1=1 order by ID