我正在进行查询,该查询在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上排序要花费更长的时间?
答案 0 :(得分:0)
为什么对布尔字段进行排序所需的时间比在PK上要长得多?
这很容易。主键有一个索引,可以按排序顺序检索记录而无需进行排序。您有一个简单的查询,因此该索引可用于检索。 (还有一个额外的优化,因为行是按主键顺序排列的,但与索引相比,这是一个额外的小增益。)
您可以在main_catalog(is_tv_on_itunes)
上创建索引或与其他字段类似的内容。
而且,仅供记录,查询:
SELECT *
FROM `main_catalog`
LIMIT 1
不对主键进行排序。查询中的结果不保证按任何特定顺序排列。如果您希望它们按主键顺序排列,那么您需要添加order by
语句来保证。