繁体   English   中英

如何加快mysql查询

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM