簡體   English   中英

可以在沒有表重組的情況下優化此查詢嗎

[英]Can this query be optimized without table restructuring?

SELECT * FROM products WHERE
serial LIKE '{$ssz}'             //exact match, no other serials in row
OR serial LIKE '%,{$ssz}'        //match at list end
OR serial LIKE '%,{$ssz},%'      //match between other two serials
OR serial LIKE '{$ssz},%'        //match at list beginning

這是我完美的查詢,其中{$ ssz}是要搜索的PHP變量。 serial TEXT列包含序列號列表,以逗號分隔。

連續出版物是唯一的,但長度可變,因此“AAB001”和“AB001”是可能的。

也許正則表達式更快? 或者采用完全不同的方法?

您可以將其縮短為:

SELECT p.*
FROM products p
WHERE FIND_IN_SET('{$ssz}', serial) > 0;

這樣看起來更好,更容易編碼。 但它並沒有快得多。

有什么問題? 您的數據模型是個問題。 您不應該在分隔的字符串中存儲事物列表。 SQL有這種存儲列表的好方法。 它被稱為而不是字符串。

您需要一個用於數據的聯結/關聯表。 然后,您可以使用適當的索引加快查詢速度。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM