布尔字段上的ORDER比PK上的顺序慢得多

时间:2014-10-27 23:49:55

标签: mysql

我正在进行查询,该查询在BOOLEAN字段(TINYINT(1))上对结果进行排序。它被编入索引。

SELECT * FROM `main_catalog` ORDER BY `main_catalog`.`is_tv_on_itunes` ASC LIMIT 1

这需要1.61秒才能运行。如果我在没有ORDER BY的情况下执行相同的查询,则只需要一小部分时间:

SELECT * FROM `main_catalog` LIMIT 1

这需要4.1毫秒才能完成。为什么在布尔字段上排序比在PK上排序要花费更长的时间?

1 个答案:

答案 0 :(得分:0)

为什么对布尔字段进行排序所需的时间比在PK上要长得多?

这很容易。主键有一个索引,可以按排序顺序检索记录而无需进行排序。您有一个简单的查询,因此该索引可用于检索。 (还有一个额外的优化,因为行是按主键顺序排列的,但与索引相比,这是一个额外的小增益。)

您可以在main_catalog(is_tv_on_itunes)上创建索引或与其他字段类似的内容。

而且,仅供记录,查询:

SELECT *
FROM `main_catalog`
LIMIT 1

对主键进行排序。查询中的结果不保证按任何特定顺序排列。如果您希望它们按主键顺序排列,那么您需要添加order by语句来保证。