通过SUBSTRING或块列优化SQL

时间:2016-11-26 15:50:14

标签: mysql query-optimization

优化此特定查询的最佳方法是什么?

例如,我有10位数的电话号码,我想查询这两个中的任何一个。

  1. WHERE columnName从123456开始
  2. WHERE columnName1 = 123 OR columnName2 = 456
  3. 首先:使用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 个答案:

答案 0 :(得分:1)

如果您需要这些条件:

  1. WHERE columnName从123456开始
  2. WHERE columnName1 = 123 OR columnName2 = 456
  3. 然后使用LIKEIN。这两个条件是:

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

    可以使用columnName上的索引优化第一个。第二种不会以当前形式使用索引(但您可以使用UNION / UNION ALL强制使用更简单的WHERE子句来使用索引。