我有一个员工表(大约450万),其中有名为job_title和domain的列。
我希望能够创建并运行动态查询,以便根据职务名称选择特定的员工,并且其域也位于所提供的域数组中。
它是如何工作的,是前端的用户最终得到一个大的域数组(从200到10,000+),然后输入两样东西:
因此,我们构建了一个查询,结果如下所示:
SELECT employee_id
FROM employee
WHERE (
        domain LIKE '%shetlandfoods.co.uk' 
        OR domain LIKE '%example1.co.uk' 
        OR domain LIKE '%example2.co.uk'
        -- About 50 additional domains in this list
        OR domain LIKE '%example50.co.uk'
    ) 
    AND (job_title LIKE '%Manager%' OR job_title LIKE '%Director%') 
    AND (job_title NOT LIKE '%Assistant%')(注意到,域列表非常长,可能包含数千个域(!))
现在,这样的查询大约需要230秒,而且只有大约180个域!想象一下使用成千上万的,这将是永远的。
我想知道是否有任何方法可以优化/更改这个查询,使其运行得更快一些?或者我能对数据库做些什么?
发布于 2016-11-22 11:05:48
倒转文本,如
WHERE REVERSE(domain) LIKE 'ku.oc.sdoofdnaltehs%' OR       REVERSE(domain) LIKE 'ku.oc.dnaltehs.cala%' OR       REVERSE(domain) LIKE 'ku.oc.detimilffokalam%'...
是一种选择,你可以尝试另一种--你也可以试试
SELECT employee_id FROM employee WHERE INSTR( domain,'shetlandfoods.co.uk' ) > 0
这比LIKE %text%快
https://stackoverflow.com/questions/40739124
复制相似问题