2016-11-26 61 views
0

優化此特定查詢的最佳方法是什麼?通過SUBSTRING或塊列優化SQL

例如我有10位數的電話號碼,我想查詢這兩個中的任何一個。

  1. WHERE COLUMNNAME從123456
  2. WHERE columnName1 = 123 OR columnName2 = 456

啓動。

第一:使用SUBSTRING

SELECT * 
FROM table 
WHERE SUBSTRING(telephone, 1,6) 

數據:

id | telephone 
    1 | 1234560001 
    2 | 1234560002 

二:通過分塊列成碎片

SELECT * 
FROM table 
WHERE pt1 = 123 AND pt2 = 456 

SELECT * 
FROM table 
WHERE pt1 = 123 OR pt2 = 456 

數據:

id | pt1 | pt2 | pt3 
    1 | 123 | 456 | 0001 
    2 | 123 | 456 | 0002 

哪個更好? SUBSTRING或分塊列?

回答

1

如果你想這些條件:

  1. WHERE COLUMNNAME從123456
  2. 地方開始columnName1 = 123 OR columnName2 = 456

然後使用LIKEIN。這兩個條件是:

WHERE columnName LIKE '123456%' 
WHERE columnName1 = 123 OR columnName2 = 456 

第一可columnName使用索引來優化。第二個是不會以目前的形式使用索引(但你可以使用UNION/UNION ALL用更簡單的WHERE條款強制索引使用。

+0

確實喜歡比SUBSTRING多首選? –

+2

@JamVille。更喜歡當該模式是一個常量/參數,並不以通配符開頭,那麼它可以使用索引。 –