0

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

[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]用于描述第三组参与的与不结盟的战斗玩家方或敌方方[battle party reality marble]用于描述能力

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

现在,虽然我可以限制用户可以在搜索中使用的标签数量,例如本网站如何将问题中使用的标签数量限制为 5 个,但我想尽量避免这种情况,但WHERE我生成的子句可以OR由于它的生成方式,在技术上具有无限的 s

OR我想知道,如果我在查询中使用太多,mysqli 中的准备好的语句会变慢吗

4

1 回答 1

6

性能影响不是因为OR组合,而是因为LIKE '%search'不能使用索引。

确实,您的数据库严重规范化 - 因此很难获得您需要的内容,并且需要更多的性能而不是必要的。

于 2013-10-08T22:44:26.120 回答