怎样才能让这个查询更快呢?这只是一种选择字段的方法,您可以在其中输入varchar文本。
SELECT
F.field_name,
FI.farmer_name,
FI.lname_farmer,
FI.farmer_email,
FI.farmer_group,
L.first_name,
L.last_name,
L.email,
EI.extension_name,
EI.lname_ext,
EI.other_prof,
EI.extension_name
FROM
anReference AS R
INNER JOIN anFieldInfo AS F ON R.ref_id = F.ref_id
INNER JOIN anFarmerInfo AS FI ON F.ref_id = R.ref_id
INNER JOIN anCropInfo AS C ON C.ref_id = R.ref_id
INNER JOIN anLocalTechnician AS L ON L.ref_id = R.ref_id
INNER JOIN anSessionExtension AS SE ON SE.ref_id = R.ref_id
INNER JOIN anExtensionInfo AS EI ON EI.extension_id = SE.extension_id
where R.date_accessed BETWEEN '2016-03-20 00:00:00'
AND NOW() AND (
F.field_name LIKE '%test%'
OR FI.farmer_name LIKE '%test%'
OR FI.lname_farmer LIKE '%test%'
OR FI.farmer_email LIKE '%test%'
OR FI.farmer_group LIKE '%test%'
OR L.first_name LIKE '%test%'
OR L.last_name LIKE '%test%'
OR L.email LIKE '%test%'
OR EI.extension_name LIKE '%test%'
OR EI.lname_ext LIKE '%test%'
OR EI.other_prof LIKE '%test%'
OR EI.extension_name LIKE '%test%'
) AND r.category = 0;我已经试过使用concat了,但效果不是很好。
发布于 2016-03-21 13:44:26
计划A。在每个表中的每组字段上创建一个FULLTEXT索引,然后对每个表使用一个MATCH..AGAINST来执行文本搜索。但是,由于数据分散在4个表中,因此执行4个SELECTs的UNION,每个表有一个MATCH。注意:它只适用于“单词”,并有其他限制。请提供SHOW CREATE TABLE;没有它,除了这个“挥手”之外,我不能做更多的事情。
下面是解决这个问题的方法:考虑如何编写SELECT来测试一个表的字段,然后执行所有的JOINing以获得所需的结果。对其他3个表重复上述步骤。然后将4个SELECTs UNION DISTINCT在一起。
B计划:构建另一个表,将所有这些字段合并在一列中;搜索该表。
计划C:更改UI。
计划D:即使有糟糕的LIKE '%text%',计划A中描述的UNION可能会更快一点。这是因为临时表将会有更少的东西可用。
A计划会快得多,但注意事项可能会阻止它的使用。B计划不会更快。
VIEW us语法糖;而不是性能助推器。
发布于 2016-03-21 12:43:13
请为您的上述查询创建一个视图,并使用View it比当前查询更快地获取数据。
https://stackoverflow.com/questions/36123165
复制相似问题