gpt4 book ai didi

sql - 需要过滤结果优化查询

转载 作者:行者123 更新时间:2023-12-03 18:19:54 27 4
gpt4 key购买 nike

我有一张叫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行,然后检查对于仅适用于以下情况的数学:

> 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=?)

关于sql - 需要过滤结果优化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31136540/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com