我已经将几个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发布于 2016-08-25 01:15:47
查询本身并没有太多可以做的事情。现在对性能影响最大的是使用%...%风格的LIKE语句。正如戈登已经在评论中提到的,这基本上消除了MySQL使用索引的能力。
这里最好的解决方案是稍微修改一下您的模式。我建议创建一个表来存储属性类型(比如两张床的公寓),然后创建某种代码(可以只是一个int类型)。在不使用LIKE语句的情况下搜索代码将使您能够使用索引,如果您必须搜索like字符串,则可以在一个小得多的表上作为子选择进行搜索。
有关进一步说明的编辑:
您将搜索与%2-bed flat%匹配的任何文本字符串。我的假设是,你这样做是因为你有像cute 2-bed flat,2-bed flat near the water这样的字符串,或者其他随机营销的东西。没有办法优化您的LIKE语句。他们很慢,这是生活中不幸的事实。
我会在您当前的表中添加一列。如果字符串与字符串%2-bed flat%匹配,则给它一个类似于2bf的值。在此过程中,您可以使用任何其他可能使用的搜索字符串来执行此操作。在此列上建立索引。
完成后,您可以只对新列进行索引搜索,而不是使用密集的LIKE语句。
https://stackoverflow.com/questions/39129111
复制相似问题