【发布时间】:2009-12-09 03:17:07
【问题描述】:
我有一张桌子,叫做 Level。
id | level | points(minimum)
-------------------------
1 | 1 | 0
2 | 2 | 100
3 | 3 | 200
假设我有 189 分,我如何查看用户处于哪个级别?
编辑:
选择了最佳答案。现在我通过在 SELECT 查询之前添加 EXPLAIN 来比较请求,我有这个结果:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-------------------------------------------------------------------------------------------------------------
1 | SIMPLE | level | ALL | NULL | NULL | NULL | NULL | 8 | Using where
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-------------------------------------------------------------------------------------------------------------
1 | SIMPLE | level | ALL | NULL | NULL | NULL | NULL | 8 | Using where; Using filesort
我怎么知道哪个更好或更快?
【问题讨论】:
-
列可以更好地命名,如
points_limit,或points_cap -
@mysqllearner:使用解释计划找出更快的方法 - 您可以通过将
explain放在 SELECT 的开头,在 SELECT 之前:EXPLAIN SELECT MAX(level) FROM LEVEL WHERE points <= 189来做到这一点。如果您需要帮助确定,请发布计划。 -
当然,我现在正在测试。很快就会发布结果:)
-
在我的解释测试中,没有索引 &
level是一个整数数据类型,除了 Extra 列之外它们是相同的。LIMIT查询具有“使用位置;使用文件排序” - MAX 版本只有“使用位置”。最大值没有“使用文件存储”,它更有效。阅读本文以了解“使用文件排序”的含义:mysqlperformanceblog.com/2009/03/05/…