我已将几个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
答案 0 :(得分:0)
查询不是很多可以完成的。您目前最大的表现是使用%...%
样式LIKE
语句。正如Gordon在评论中已经提到的那样,这基本上消除了MySQL使用索引的能力。
这里最好的解决方案是略微改变你的架构。我建议创建一个存储属性类型的表(如2-bed flat),然后是某种代码(可能只是一个int)。搜索没有LIKE
语句的代码将使您能够使用索引,如果您必须搜索类似的字符串,则可以在更小的表上进行子选择。
编辑以进一步说明:
您正在搜索与%2-bed flat%
匹配的任何文字字符串。我的假设是你这样做,因为你有cute 2-bed flat
,2-bed flat near the water
或其他随机营销的字符串。无法优化您的LIKE
语句。他们变慢了,这是生活中不幸的事实。
我会在当前表中添加一列。如果字符串与字符串%2-bed flat%
匹配,则为其赋予类似2bf
的值。在您使用它时,可以使用您可能使用的任何其他搜索字符串执行此操作。在此列上添加索引。
完成后,您只需对新列进行索引搜索,而不是使用密集的LIKE
语句。