0

对于应用程序的索引页面,我需要从 MySQL-DB 的表中提取所有条目。可以设置过滤器,但最初 where-clause 是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

这是解释的结果: 解释查询截图

是的:我确实理解数据库在这里使用索引并没有太大意义,但是由于这对我来说似乎是一个相当普遍的情况,我希望有一个最佳实践来面对这个问题

4

1 回答 1

1

在 order by 子句中使用索引。所以如果 ID 是你的 primary_index 然后写WHERE 1=1 order by ID

于 2013-06-11T10:04:44.777 回答