iT邦幫忙

0

SQL varchar(max) 搜尋

  • 分享至 

  • xImage

想詢問一下各位先進,怎麼優化搜尋條件

我本來查詢欄位沒有放 remark(varchar(max))

但是user說有些資料要查remark裡面但是 varchar(max)資料量很大導致搜尋速度緩慢

範例 :where remark like '%證書%'

請問有什麼建議呢? 有試過index效果有限

如果user要用remark當條件時,可以建議user多加一個條件讓速度變快呢?
如果條件多選一個非remark欄位
>select * from (select * from table where 條件) where remark like..
阿里巴巴大俠,

請問我如果語法多加條件比如說

where remark like '%證書%' and remark <> '條件'

這樣速度會提升嗎?
厚厚 iT邦新手 1 級 ‧ 2023-12-28 10:35:02 檢舉
差異不大,效能的問題在 like '%證書%'
阿里巴巴大俠說的主要是先減少scan的範圍,再LIKE
你都 like '%證書%' 了,remark <> '條件' 不知道有甚麼意義
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
厚厚
iT邦新手 1 級 ‧ 2023-12-25 15:14:40

因為慢的地方在"LIKE" ,所以INDEX效果有限

建議依照需求把資料多一欄位做分類,例如"證書"、"公文"、...
在直接用WHERE去查這欄

remark裡面的他要搜尋什麼是動態的 不能寫死

厚厚 iT邦新手 1 級 ‧ 2023-12-25 16:46:16 檢舉

我了解,USER總是希望又快又簡單,以後只用全文檢索找資料,但我覺得可以換個想法溝通並利用系統設計達到大部分需求,不然就是告知就是要這麼慢

厚厚 iT邦新手 1 級 ‧ 2023-12-25 16:48:48 檢舉

不然至少要限定其他多個條件,最後再LIKE remark

1
alien663
iT邦研究生 5 級 ‧ 2023-12-25 15:52:49

如果你希望透過修改SQL語法來改善效率的話,我覺得無解。

你遇到的問題是全文搜尋的問題,或許可以考慮這一招建立及管理全文檢索索引

sam0407 iT邦大師 1 級 ‧ 2023-12-26 09:49:17 檢舉

我也是覺得只有全文檢索能解決原PO的問題~~

0

只要是 like 就一定會跑全表。
畢竟,like 也無任何能索引的方式。

一般只能往全文索引處理了。

0
純真的人
iT邦大師 1 級 ‧ 2023-12-25 20:38:56

在10萬筆以上資料的時候~我是分過兩次搜尋有比較快~你可以試試看~

--第一次搜尋(BookID 是索引Index)
declare @Tmp table(TmpID int)
insert into @Tmp
select BookID
from Book
where remark like N'%證書%'

--第二次搜尋
select *
from @Tmp
left join Book on TmpID = BookID

0
石頭
iT邦高手 1 級 ‧ 2023-12-25 21:01:03

where remark like '%證書%'
請問有什麼建議呢? 有試過index效果有限

首先這個點在一般 RDMS 全模糊查詢就算有 B+index 也不會使用, 因為需要的是Inverted_index , 再來是看你使用的 RDBMS 是否有支援 Inverted_index 另外還需要看 Inverted_index 拆字是否準確 (因為你的情境是中文)

假如你的 RDBMS 沒有支援 Inverted_index 並且資料量也很大, 其中一個方式是可以搭配使用 elastic

https://www.elastic.co/guide/en/elasticsearch/reference/current/documents-indices.html

Note: 如果是這個案例有索引會比較快 where remark like '證書%'

0
pilipala
iT邦新手 2 級 ‧ 2023-12-26 09:33:56

有試過index效果有限

在 MS SQL 內 varchar(max) 欄位是無法建立 index 的,所謂的 index 效果有限是指甚麼阿?

0
sabinaholt
iT邦新手 5 級 ‧ 2024-02-12 20:55:24

To optimize search conditions in a large varchar(max) field like 'remark', consider implementing full-text search. It efficiently handles large text data, enhancing search speed and performance akin to upgrading to solar panel technology.

我要發表回答

立即登入回答