从SQL数据库中获取包含数字子集的行
我有一个SQL数据库表,我试图返回列以8个特定数字开头的行。例如,我们可以将列称为“numbers”,它总是有11个数字。我希望返回前8行是“24681234”的行。我曾尝试使用“LIKE”命令,但考虑到数据库的大小,它需要永远运行。下面是我目前使用的命令:从SQL数据库中获取包含数字子集的行,sql,sql-server,database,Sql,Sql Server,Database,我有一个SQL数据库表,我试图返回列以8个特定数字开头的行。例如,我们可以将列称为“numbers”,它总是有11个数字。我希望返回前8行是“24681234”的行。我曾尝试使用“LIKE”命令,但考虑到数据库的大小,它需要永远运行。下面是我目前使用的命令: SELECT TOP 1 CREATE_TIME, EMAIL, FIRST_NAME, LAST_NAME, NUMBER, SN FROM MY_TABLE WHERE NUMBER LIKE '35722806%' OR NUMBER
SELECT TOP 1 CREATE_TIME, EMAIL, FIRST_NAME, LAST_NAME, NUMBER, SN
FROM MY_TABLE WHERE NUMBER LIKE '35722806%' OR NUMBER LIKE '35981106%'
有没有更快的方法来搜索此信息 您有几个可能的选择:-
SELECT TOP 1 CREATE_TIME, EMAIL, FIRST_NAME, LAST_NAME, NUMBER, SN FROM MY_TABLE WHERE LEFT(NUMBER,8) ='35722806' OR LEFT(IMEI,8) ='35981106'
或
也许在列上创建索引也会有所帮助。假设列“number”是数字数据类型,您可以
SELECT TOP 1 CREATE_TIME, EMAIL, FIRST_NAME, LAST_NAME, NUMBER, SN
FROM MY_TABLE
WHERE
NUMBER BETWEEN 35722806000 AND 35722806999
OR IMEI BEWEEN 35981106000 AND 35981106999
在此字段上建立索引将有助于选择,但许多插入的性能是一种折衷。您是否考虑过在
NUMBER
和IMEI
上创建索引?表有多大(行计数和大小)?列“数字”是定义为数字数据类型的列还是字符串数据类型?@ZoffDino我正在尝试获取计数,但考虑到它已经运行计数查询几分钟,我假设它很大。我猜我必须对此进行索引,然后运行查询以加快速度。使用EXEC sp\u spaceused'MY\u TABLE'
快速count@ZoffDino谢谢大约有14000000行。。。所以是的,相当大。索引它需要多长时间?这些查询不是。因此,如果相关列上有索引,则原始查询的性能可能会更好。
SELECT TOP 1 CREATE_TIME, EMAIL, FIRST_NAME, LAST_NAME, NUMBER, SN
FROM MY_TABLE
WHERE
NUMBER BETWEEN 35722806000 AND 35722806999
OR IMEI BEWEEN 35981106000 AND 35981106999