Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL—搜索大型数据集的快速方法_Sql_Sql Server - Fatal编程技术网

SQL—搜索大型数据集的快速方法

SQL—搜索大型数据集的快速方法,sql,sql-server,Sql,Sql Server,我的SQL数据库可能会存储数亿条记录 目前,单个表存储多个设备的记录。我需要快速返回单个设备的信息。仅查询特定设备的记录的最快方法是什么 我试着使用下面的子查询,但是在测试中这并没有改善功能,索引也没有,尽管这可能是因为我做得不正确 我的问题之一是: SELECT SINGLEDEVICE.[speed] FROM (SELECT * FROM DEVICES WHERE Device = 'Device 1') AS SINGLEDEVICE WHERE Speed > 100 尝试创

我的SQL数据库可能会存储数亿条记录

目前,单个表存储多个设备的记录。我需要快速返回单个设备的信息。仅查询特定设备的记录的最快方法是什么

我试着使用下面的子查询,但是在测试中这并没有改善功能,索引也没有,尽管这可能是因为我做得不正确

我的问题之一是:

SELECT SINGLEDEVICE.[speed] FROM
(SELECT * FROM DEVICES WHERE Device = 'Device 1') AS SINGLEDEVICE
WHERE Speed > 100

尝试创建以下索引

CREATE INDEX devices_device_speed
             ON devices
                (device,
                 speed);
然后去掉子查询。充其量,它会被优化掉,甚至会减慢速度

SELECT speed
       FROM devices
       WHERE device = 'Device 1'
             AND speed > 100;

尝试创建以下索引

CREATE INDEX devices_device_speed
             ON devices
                (device,
                 speed);
然后去掉子查询。充其量,它会被优化掉,甚至会减慢速度

SELECT speed
       FROM devices
       WHERE device = 'Device 1'
             AND speed > 100;

如果不存在,则创建索引

IF NOT EXISTS (SELECT 1 FROM sys.indexes I WHERE I.Name = 'NCIX_DEVICES_device_speed' AND I.object_id = OBJECT_ID('DEVICES'))
    CREATE NONCLUSTERED INDEX NCIX_DEVICES_device_speed ON DEVICES ( Device,Speed)
GO
如果可能,最好避免子查询

SELECT d.speed
FROM DEVICES d
WHERE d.device = 'Device 1'AND d.speed > 100;

如果不存在,则创建索引

IF NOT EXISTS (SELECT 1 FROM sys.indexes I WHERE I.Name = 'NCIX_DEVICES_device_speed' AND I.object_id = OBJECT_ID('DEVICES'))
    CREATE NONCLUSTERED INDEX NCIX_DEVICES_device_speed ON DEVICES ( Device,Speed)
GO
如果可能,最好避免子查询

SELECT d.speed
FROM DEVICES d
WHERE d.device = 'Device 1'AND d.speed > 100;

当您从数百万条记录中搜索时,Sqlserver引入了

其搜索使用关键字“Contains”,语法为

SELECT product_id   
FROM products   
WHERE CONTAINS(product_description, "Snap Happy 100EZ" )   
AND product_cost < 200 ; 
选择产品标识
来自产品
其中包含(产品描述,“Snap Happy 100EZ”)
产品成本<200;
在fts之前,使用主键、适当的外键以加快速度。从实现的角度来看,它是非常容易的,并给出了任意搜索的快速搜索

它有优点也有缺点

当您从数百万条记录中搜索时,Sqlserver引入了

其搜索使用关键字“Contains”,语法为

SELECT product_id   
FROM products   
WHERE CONTAINS(product_description, "Snap Happy 100EZ" )   
AND product_cost < 200 ; 
选择产品标识
来自产品
其中包含(产品描述,“Snap Happy 100EZ”)
产品成本<200;
在fts之前,使用主键、适当的外键以加快速度。从实现的角度来看,它是非常容易的,并给出了任意搜索的快速搜索

它有优点也有缺点

如果只有几个设备,您还可以按设备对表进行分区。如果只有几个设备,您还可以按设备对表进行分区。您有多少个设备?通常返回多少行?您有多少设备?通常返回多少行?谢谢您的帮助。索引未正确优化。感谢您的帮助。索引未正确优化。