首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL -提高性能

问SQL -提高性能
EN

Stack Overflow用户
提问于 2016-08-25 00:59:02
回答 1查看 44关注 0票数 1

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

代码语言:javascript
复制
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

输出为

代码语言:javascript
复制
| Property   | Average Asking Price
| 2-bed flat | 751427.1935581862
EN

回答 1

Stack Overflow用户

发布于 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语句。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39129111

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档