优化此特定查询的最佳方法是什么?
例如,我有10位数的电话号码,我想查询这两个中的任何一个。
首先:使用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或分块列?
答案 0 :(得分:1)
如果您需要这些条件:
然后使用LIKE
或IN
。这两个条件是:
WHERE columnName LIKE '123456%'
WHERE columnName1 = 123 OR columnName2 = 456
可以使用columnName
上的索引优化第一个。第二种不会以当前形式使用索引(但您可以使用UNION
/ UNION ALL
强制使用更简单的WHERE
子句来使用索引。