我有一个包含~100,000个条目的数据库 - 现在我的查询看起来像这样:
SELECT id,zipcode,price FROM listing WHERE zipcode IN(96815,96815, 96835,96828,96830,96826,96836,96844,96816,96847,96814,96822, 96823,96843,96805,96806,96810,96848,96808,96809,96842,96839, 96802,96812,96804,96803,96840,96807,96813,96841,96801,96850, 96811,96898,96837,96827,96824,96846,96821,96817,96859,96838, 96819,96820,96858,96849,96825,96795,96863,96818,96853,96861, 96734,96744,96701,96860,96709,96782,96706,96797,96862,96789, 96707,96730,96854,96759,96786,96857,96717,96792,96762,96712, 96791,96731)AND(价格在1000和1200之间)按订单编号
当我只有50,000个条目时,这个查询工作正常,但是当我扩展邮政编码的半径时它变得非常慢(这导致in子句中的邮政编码更多)。
id int(8)AUTO_INCREMENT价格mediumint(7) zipcode mediumint(5)
所有三个字段都已编入索引。有谁知道我如何优化它?谢谢你们
答案 0 :(得分:0)
邮政编码通常是按地理位置分布的 - 您可以通过将邮政编码条款简化为以下内容来加快速度:
zipcode BETWEEN 96700 AND 96898
这可能最终无意中包含了一些您不想要的邮政编码,但最终可能会更有效地将其过滤掉。
答案 1 :(得分:0)
被索引的每个字段与正确索引的字段之间存在很大差异。 据我所知,您只需要一个索引即可使查询运行得更快
尝试使用以下列(zipcode,price)创建索引