gpt4 book ai didi

mysql - 查询性能 : Search by postcode, 公司名称或城镇

转载 作者:行者123 更新时间:2023-11-29 14:43:00 25 4
gpt4 key购买 nike

请参阅下面的 SQL 查询 - 它允许您按邮政编码、公司名称或城镇(位置)搜索商店...在前端网站上,只有一个搜索文本框,没有下拉搜索类型。

仅当 shop_options.live 等于 1 且取决于商店营业日:O_Hour.weekday = '5'(星期五)时,才会显示结果。

如果我按 S_D.postcode 搜索(例如:S_D.postcode = 'L14'),它将从 shop_delivery_area 找到 L14表,然后显示该邮政编码的商店列表。

SELECT distinct S.*, S.company, S.street, S.town FROM shop as S
JOIN shop_delivery_area as S_D on S_D.shopID = S.shopID
JOIN shop_options on shop_options.shopID = S.shopID
JOIN shop_opening_hours as O_Hour on O_Hour.shopID = S.shopID
WHERE (S_D.postcode = 'Liverpool' OR S.company LIKE 'Liverpool' OR S.town LIKE 'Liverpool')
AND shop_options.live = '1' AND O_Hour.weekday = '5'
ORDER BY O_Hour.opentime

查询确实有效,但速度非常慢。几乎一秒钟就得到结果。如何更快的提升性能​​?

编辑:修复了 SQL 查询。

最佳答案

如果您需要保留谓词,即

S_D.postcode = 'Liverpool'  OR S.company LIKE 'Liverpool' OR S.town LIKE 'Liverpool'

然后考虑在同一列上添加索引。所以:

ALTER TABLE shop_delivery_area ADD KEY `sda_idx1` (`postcode`);
ALTER TABLE shop ADD KEY `shop_idx1` (`company`);
ALTER TABLE shop ADD KEY `shop_idx2` (`town`);

另一点是关于模糊搜索。如果您可以用“=”替换“LIKE”,那么您将看到速度的提高。使用没有模糊搜索的“LIKE”没有多大意义,即 LIKE“Liverpool”。使用 LIKE '%Liverpool%' 或 = 'Liverpool'。所以要么使用:

    S_D.postcode = 'Liverpool'  OR S.company LIKE '%Liverpool%' OR S.town LIKE '%Liverpool%'

    S_D.postcode = 'Liverpool'  OR S.company = 'Liverpool' OR S.town = 'Liverpool'

如果您使用后者并创建索引,那么您的查询应该运行得很好!

关于mysql - 查询性能 : Search by postcode, 公司名称或城镇,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7609313/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com