問題:WHERE col LIKE '%...%' 查詢含特殊字元欄位時記憶體溢出。
解法:改用 Recordset.Filter:
sql = "SELECT * FROM ada";
rs.Open sql, conn;
rs.Filter = "alice LIKE '%" & abigale & "%'";
以空格分割關鍵字,動態建構 AND 條件:
ck = Split(abigale, " ")
sql = "SELECT * FROM ada WHERE "
For i = 0 To UBound(ck)
sql = sql & IIf(i=0, "", " AND ") & "(alice LIKE '" & ck(i) & "%')"
Next
' 多欄位同時查詢
sql = sql & IIf(i=0, "", " AND ") & "(alice LIKE '" & ck(i) & "%' OR alice1 LIKE '" & ck(i) & "%')"
OR → 導致全表掃描。CHARINDEX() 不優於 LIKE '...%',且會使索引失效(SQL Server)。LIKE '%...%' 失效索引;LIKE '...%' 生效索引(去掉前置 %)。SELECT *,每減少一欄位即有速度提升。ORDER BY 叢集索引欄位效率最高(每表僅一叢集索引,預設為 ID)。