SQL - 加快性能

时间:2016-08-24 16:59:02

标签: mysql sql

我已将几个css导入合并到一个表中 - 但此调用大约需要70秒才能完成。有没有办法重写它以加快速度?

SELECT 
    `table_merged`.Property AS 'Property',
    AVG(`table_merged`.`Value`) AS 'Average Asking Price'
FROM
    `table_merged`
WHERE 
    `table_merged`.`Area` LIKE '%NW1%'
    AND `table_merged`.`Property` LIKE '%2-bed flat%'
    AND `table_merged`.`Year` = '2016'
GROUP BY 
    `table_merged`.Property, `table_merged`.`Year`
ORDER BY
    `table_merged`.Property ASC

输出

| Property   | Average Asking Price
| 2-bed flat | 751427.1935581862

1 个答案:

答案 0 :(得分:0)

查询不是很多可以完成的。您目前最大的表现是使用%...%样式LIKE语句。正如Gordon在评论中已经提到的那样,这基本上消除了MySQL使用索引的能力。

这里最好的解决方案是略微改变你的架构。我建议创建一个存储属性类型的表(如2-bed flat),然后是某种代码(可能只是一个int)。搜索没有LIKE语句的代码将使您能够使用索引,如果您必须搜索类似的字符串,则可以在更小的表上进行子选择。

编辑以进一步说明:

您正在搜索与%2-bed flat%匹配的任何文字字符串。我的假设是你这样做,因为你有cute 2-bed flat2-bed flat near the water或其他随机营销的字符串。无法优化您的LIKE语句。他们变慢了,这是生活中不幸的事实。

我会在当前表中添加一列。如果字符串与字符串%2-bed flat%匹配,则为其赋予类似2bf的值。在您使用它时,可以使用您可能使用的任何其他搜索字符串执行此操作。在此列上添加索引。

完成后,您只需对新列进行索引搜索,而不是使用密集的LIKE语句。