[英]How do I speed up mysql query
我非常需要一些东西来加快此查询的速度!
这是查询,如何添加索引以加快查询速度,如何进行更改以使查询更快?
这是在phpmyadmin中执行的实际查询。
显示第0-6行(共7行,查询耗时6.4767秒)
这是相同的查询,但是我正在使用UNION ALL来显示所有结果:
显示第0-29行(共23074行,查询耗时4.0590秒)
SELECT `location2` as `location`, '2' as `number`
FROM `properties`
WHERE `price_from` BETWEEN 0 AND 999999
AND `country` = 'spain'
union
SELECT `location3` as `location`, '3' as `number`
FROM `properties`
WHERE `price_from` BETWEEN 0 AND 999999
AND `location2` = 'spain'
union
SELECT `location4` as `location`, '4' as `number`
FROM `properties`
WHERE `price_from` BETWEEN 0 AND 999999
AND `location3` = 'spain'
union
SELECT `location5` as `location`, '5' as `number`
FROM `properties`
WHERE `price_from` BETWEEN 0 AND 999999 AND
`location4` = 'spain'
union
SELECT `location6` as `location`, '6' as `number`
FROM `properties`
WHERE `price_from` BETWEEN 0 AND 999999
AND `location5` = 'spain'
提高性能的最快方法是向国家/地区添加索引。 更好的方法是在国家/地区列上使用整数查询ID,方法是添加其他国家/地区表(country_id,国家/地区),然后将country ='spain'更改为country_id = 1
如有可能,请考虑用UNION ALL替换UNION,因为UNION会进行排序并执行重复数据删除。
INDEX(country, price_from, location2),
INDEX(location2, price_from, location3),
...
这些索引不仅可以通过加快WHERE
速度,还可以通过“覆盖”来加快速度。 不要使用索引“前缀”(如千电子伏建议); 它不会工作。 如果您的位置大于(100),它们到底是什么? 没有一个“国家”在任何地方都有如此大的名字。
请提供SHOW CREATE TABLE
这样我们就可以解释为什么你不应该作为列执行单元的阵列,而是有一个单独的表。
一旦有了单独的表, UNIONs
就会消失,查询变得既简单又快速。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.