我有一张桌子叫Device
:
Device Table
id deviceName genId description overview
1 PV motor 5 motor capacity 5 motor load is good
2 puf pannel 6 puf capacity 2 puf is for small load
3 gd motor 5 motor capacity 7 motor load is very good
4 rg motor 5 capacity is 3 low capacity
现在假设此表有成千上万的记录,我需要添加对行的搜索,例如,genId=5 and description Like = '%motor%' OR Overview Like='%motor%'
搜索结果为
1 PV motor 5 motor capacity 5 motor load is good
3 gd motor 5 motor capacity 7 motor load is very good
我需要构造一个查询,该查询首先从表中搜索genId 5,然后它搜索包含诸如motor之类的文本的描述和概述。由于如果我的表有100条记录,并且只有5条记录的genId设置为5,那么我的文本搜索查询将在这5行而不是100行上执行。
我的搜索查询:
Select *
From Device
where (genId=5) And (description Like '%motor%' Or overview Like '%motor%')
谁能帮助我创建优化的查询?
您的查询已经尽可能优化。
LIKE本身并不慢;缓慢的是从磁盘加载所有表行,而LIKE通常需要这样做,因为它无法使用索引优化其查找。
但是,当genId
列上没有索引时,无论如何都需要加载所有行以检查这些值,因此插入多余的步骤将是不必要的:
> EXPLAIN QUERY PLAN Select * From Device where (genId=5) And (description Like '%motor%' Or overview Like '%motor%');
0|0|0|SCAN TABLE Device
如果,另一方面,是在一个索引genId
列,那么你不需要做任何手动优化,因为数据库会自动查找匹配的genId
行索引,然后检查LIKE MATHES,只有对那些:
> CREATE INDEX genId_index ON Device(genId);
> EXPLAIN QUERY PLAN Select * From Device where (genId=5) And (description Like '%motor%' Or overview Like '%motor%');
0|0|0|SEARCH TABLE Device USING INDEX genId_index (genId=?)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句