我正在尝试让这个查询使用我创建的索引,但它仍在进行全表扫描。我甚至试图创建一个多字段索引,但不是运气。我尝试了FORCE INDEX,但也没有运气。
Places表有150万条记录。查询的目的是让它沿着街道按正确的顺序对地点进行排序。
SELECT PlacesId
FROM Places FORCE INDEX (Streetname, StreetType, PreDirection,
PostDirection, HouseNumber, UnitNumber)
WHERE Type='Physical'
ORDER BY StreetName, StreetType, PreDirection, PostDirection, HouseNumber, UnitNumber;
解释输出
{
"query_block": {
"select_id": 1,
"ordering_operation": {
"using_filesort": true,
"table": {
"table_name": "Places",
"access_type": "ALL",
"rows": 1519419,
"filtered": 100,
"attached_condition": "(`importready`.`Places`.`Type` = 'Physical')"
}
}
}
}
我考虑过为列创建哈希,但我认为不会让我到那里。
我可以将街道特定字段(PreDirection,StreetName,StreetType,PostDirection)组合在一起吗?
物理的总行数为1,376,984
Table Non_unique Key_name Seq_in_index Column_name Collation Cardinality Sub_part Packed Null Index_type Comment Index_comment
Places 0 PRIMARY 1 PlacesId A 1519419 NULL NULL BTREE
Places 1 PartAddress 1 Address1 A 1519419 25 NULL YES BTREE
Places 1 City 1 City A 4763 15 NULL YES BTREE
Places 1 Zip 1 ZipCode A 1116 5 NULL YES BTREE
Places 1 HouseNumber 1 HouseNumber A 138129 NULL NULL YES BTREE
Places 1 UnitNumber 1 UnitNumber A 27625 NULL NULL YES BTREE
Places 1 PostDirection 1 PostDirection A 20 NULL NULL YES BTREE
Places 1 PreDirection 1 PreDirection A 20 NULL NULL YES BTREE
Places 1 StreetType 1 StreetType A 96 NULL NULL YES BTREE
Places 1 StreetName 1 StreetName A 56274 NULL NULL YES BTREE
Places 1 Precinct 1 Precinct A 1327 NULL NULL YES BTREE
Places 1 County 1 County A 72 NULL NULL YES BTREE
Places 1 SortOrder 1 StreetName A 46043 20 NULL YES BTREE
Places 1 SortOrder 2 StreetType A 75970 5 NULL YES BTREE
Places 1 SortOrder 3 PreDirection A 94963 6 NULL YES BTREE
Places 1 SortOrder 4 PostDirection A 108529 6 NULL YES BTREE
Places 1 SortOrder 5 HouseNumber A 1519419 NULL NULL YES BTREE
Places 1 SortOrder 6 UnitNumber A 1519419 5 NULL YES BTREE
标记
答案 0 :(得分:0)
来自Mysql文档: 在某些情况下,MySQL可以使用索引来满足ORDER BY子句,而无需进行任何额外的排序。
即使ORDER BY与索引不完全匹配,也可以使用索引,只要索引的所有未使用部分和所有额外的ORDER BY列都是WHERE子句中的常量
索引中缺少的是字段类型(在索引的开头)。