Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/jsf/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在联接中使用LIKE时出现性能问题_Mysql_Performance_Join - Fatal编程技术网

Mysql 在联接中使用LIKE时出现性能问题

Mysql 在联接中使用LIKE时出现性能问题,mysql,performance,join,Mysql,Performance,Join,我们有一个电子商务网站。我们给顾客信用凭证。他可以在1,2…n个订单中使用这个,并进一步下订单。 假设我们发行了名为“abcd”的贷记凭证。当他拆分并使用凭证并按顺序使用时,它将进行调整,如abcd-1等。因此,我试图制作一份报告,列出所有已发行的贷记凭证以及使用这些凭证下的订单。我写了下面的查询。它工作得很好,但加载需要很多时间。我能为表演做些什么吗 SELECT * FROM (creditvouchers) LEFT JOIN adjustment ON `adjustment`.`cod

我们有一个电子商务网站。我们给顾客信用凭证。他可以在1,2…n个订单中使用这个,并进一步下订单。 假设我们发行了名为“abcd”的贷记凭证。当他拆分并使用凭证并按顺序使用时,它将进行调整,如abcd-1等。因此,我试图制作一份报告,列出所有已发行的贷记凭证以及使用这些凭证下的订单。我写了下面的查询。它工作得很好,但加载需要很多时间。我能为表演做些什么吗

SELECT *
FROM (creditvouchers)
LEFT JOIN adjustment ON `adjustment`.`code` 
                    LIKE IF((creditvouchers.creditvoucher = ''),
                        creditvouchers.creditvoucher,
                        CONCAT(creditvouchers.creditvoucher,'','%'))
这是桌子

creditvouchers -> id PK, creditvoucher varchar(50)
adjustment     -> id PK, code varchar(50)

以下是不带
if()
的查询逻辑:

我建议您考虑一下您的数据结构。我怀疑中间表,
CreditvoucherCode
会对您的系统有所帮助。每个信用凭证和代码将有一行


另一种可能性是,如果每个
贷记凭证
的长度相同,例如4,然后,您可以向
调整
中添加另一个字段,该字段包含
贷记凭证

我还建议您为凭证使用一个数字id,并在另一个表中提供凭证与订单之间的映射。在这个映射表中,您将只拥有要匹配的ID,它比使用LIKE进行varchar比较快得多


如果您想知道您进行了哪些调整,只需在表中搜索凭证,并将其与映射表中的凭证id联接。

保留一列,其中包含真实的
creditvoucher
abcd
)与其加入类似的
abcd-1
?@h2oooooooo-我不清楚你在暗示什么,为什么每个人每次都使用
类似的
,为什么你不试试呢。它比
比如
@Pramod快-我正在使用INODBengine@Hacker阅读在最新版本中,innodb还支持全文搜索。
SELECT *
FROM creditvouchers cv LEFT JOIN
     adjustment a
     ON a.`code` like concat(cv.creditvoucher, '%') and cv.creditvoucher <> '' or
        a.code = '';
select *
from creditvouchers cv left join
     adjustment a
     on a.code like concat(cv.creditvoucher, '%') and cv.creditvoucher <> ''