2016-11-26 22 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。更喜欢当该模式是一个常量/参数,并不以通配符开头,那么它可以使用索引。 –