mysql查询优化not in_MYSQL查询,优化LIKE和NOT IN

我有一个需要运行的查询,目前运行速度非常慢。我正在使用的表格有近100万条记录。

我需要做的是搜索带有LIKE名称的项目:示例"SELECT name, other, stuff FROM my_table WHERE name LIKE '%some_name%'"

此外,它必须能够从搜索结果中排除某些带有通配符的术语,以便它变成如下所示:

SELECT name, other, stuff

FROM my_table

WHERE name LIKE '%some_name%'

AND name NOT IN (SELECT name FROM my_table WHERE name LIKE '%term1%' AND name LIKE '%term2%' AND name LIKE '%term3%')最重要的是,我有两个INNER JOIN,我必须在PHP中执行它。我在表中列出了相关列的索引。它在服务器上的速度非常快,几乎可以对其他任何查询进行处理。

问题是,是否有一种不同的方法可以用来做这种快速的查询?

更新

这是我在将FULLTEXT索引添加到chem表后尝试使用匹配函数的实际查询。注:我无法控制表/列名称。我知道他们看起来不错。

CREATE FULLTEXT INDEX name_index ON chems (name)

SELECT f.name fname, f.state, f.city, f.id fid,

cl.alt_facilid_ida, cl.alt_facili_idb,

c.ave, c.name, c.id chem_id,

cc.first_name, cc.last_name, cc.id cid, cc.phone_work

FROM facilities f

INNER JOIN facilitlt_chemicals_c cl ON (f.id = cl.alt_facilid485ilities_ida)

INNER JOIN chems c ON (cl.alt_facili3998emicals_idb = c.id)

LEFT OUTER JOIN facilities_contacts_c con ON (f.id = con.alt_facili_ida)

LEFT OUTER JOIN contacts cc ON (con.alt_facili_idb = cc.id)

WHERE match(c.name) against ('+lead -gas' IN BOOLEAN MODE)这只是一个简单查询的例子。实际条件可能很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值