[英]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.