我有一个函数可以把这个字符串

[games]|[nexis core]|[core]|[lemure lemure]|[chrome tower dlc]


进入这个where子句

WHERE
(
    main.tags LIKE '%[games]%' OR
    main.tags LIKE '%[nexis core]%' OR
    main.tags LIKE '%[core]%' OR
    main.tags LIKE '%[lemure lemure]%' OR
    main.tags LIKE '%[chrome tower dlc]%'
)


在进行搜索的表中,一条记录将具有一个tags字段,如下所示

[boss]|[lemure lemure]|[astra]|[divine]|[kamidori]|[3rd party]|[razil]|[core]


因此,当上述where子句运行时,它可以搜索tags字段,并且标记的顺序对搜索没有影响

我将每个标签包含在[]中并对其进行LIKE修饰的原因是,如果有人搜索标签party,他们可能会得到[3rd party] [party members] [nunnally's battle party] [battle party reality marble],这与[3rd party]完全不同。描述第3组参加的与玩家方或敌方方无关的战斗,而[battle party reality marble]用于描述能力

我用|分隔每个标签,以便当我从数据库中提取字符串并将每个标签输出到页面时,可以在PHP中爆炸该字符串,类似于在此处提出问题时的建议标签

现在,尽管我可以限制用户可以在搜索中使用的标签数量,例如该站点如何将问题中使用的标签数量限制为5个,但我想尝试避免这种情况,请使用WHERE子句我生成的内容在技术上可以具有无限OR,因为它的生成方式

我想知道,如果我在查询中使用太多的OR,mysqli中的准备好的语句能否减慢速度?

最佳答案

对性能的影响不是由于OR组合,而是由于LIKE '%search'不能使用索引。

实际上,您的数据库已被严重规范化-因此,很难获得所需的信息,并且所需要的性能超出了必要。

关于php - 有多个OR类会降低查询速度,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19259810/

10-10 23:05