慢Mysql查询/在子句中

时间:2011-07-14 23:46:09

标签: mysql zip

我有一个包含~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)

所有三个字段都已编入索引。有谁知道我如何优化它?谢谢你们

2 个答案:

答案 0 :(得分:0)

邮政编码通常是按地理位置分布的 - 您可以通过将邮政编码条款简化为以下内容来加快速度:

zipcode BETWEEN 96700 AND 96898

这可能最终无意中包含了一些您不想要的邮政编码,但最终可能会更有效地将其过滤掉。

答案 1 :(得分:0)

被索引的每个字段与正确索引的字段之间存在很大差异。 据我所知,您只需要一个索引即可使查询运行得更快

尝试使用以下列(zipcode,price)创建索引