首页 > 数据库 >1万条数据只能传值调用存储过程,sql如何优化

1万条数据只能传值调用存储过程,sql如何优化

时间:2023-03-23 17:33:41浏览次数:34  
标签:万条 PageSize INT TotalRows 传值 数据量 sql DECLARE SELECT

1

如果需要传递的数据量比较大,那么在存储过程中使用表变量是一种比较好的选择,而且可以通过以下方式优化:

使用临时表代替表变量
如果从外部获取的数据量较大,可以考虑使用临时表代替表变量。临时表不仅可以存储大量数据,而且可以适应更复杂的数据操作。通过创建索引,可以提高临时表的查询性能。但需要注意的是,在应用程序结束后,临时表的数据将被删除。

使用分页查询
如果需要处理的数据量非常大,可以考虑使用分页查询,对数据进行分批处理。这样可以避免一次性处理大量数据带来的性能问题。可以使用 OFFSET FETCH 或者 ROW_NUMBER 函数来实现分页查询,具体方法可以参考以下代码示例:

DECLARE @PageSize INT = 1000;
DECLARE @PageNum INT = 1;
DECLARE @TotalRows INT = 0;

SELECT @TotalRows = COUNT(*) FROM MyTable;

WHILE (@PageSize * @PageNum) < @TotalRows
BEGIN
    SELECT *
    FROM (
        SELECT *, ROW_NUMBER() OVER (ORDER BY ID) AS RowNum
        FROM MyTable
    ) AS t
    WHERE t.RowNum > (@PageSize * (@PageNum - 1)) AND t.RowNum <= (@PageSize * @PageNum);

    SET @PageNum = @PageNum + 1;
END
使用批量插入操作
如果需要插入大量数据,可以考虑使用批量插入操作,而不是一条一条地插入数据。可以使用 SQL Server 提供的 BULK INSERT 或者 INSERT INTO ... SELECT 语句来实现批量插入。

可以将需要插入的数据存储在文件或者表中,通过 BULK INSERT 或者 INSERT INTO ... SELECT 语句来读取数据并插入到目标表中。以下是一个示例代码:

BULK INSERT MyTable
FROM 'C:\Data\MyData.tsv'
WITH 
(
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR = '\n',
    BATCHSIZE = 1000
);
上述建议都只是提供了一些优化的思路,具体优化方式需要根据具体场景和数据情况进行选择

 

标签:万条,PageSize,INT,TotalRows,传值,数据量,sql,DECLARE,SELECT
From: https://www.cnblogs.com/springcloud/p/17248273.html

相关文章

  • 写一条sql列出开始日期和结束日期之间的每一天(包括起止日期)
    给定一个开始日期和结束日期,写个sql把中间的每天都查出来(包括开始和结束日期)。给定开始时间是2023-03-12,结束时间是2023-03-22,sql如下:SELECTDATE_ADD('2023-03-12',IN......
  • CentOS安装Mysql5
    title:CentOS安装Mysql5.7date:2022-08-1417:45:50tags:-Linux-CentOS-Mysqlcategories:-运维-数据库-Mysqlkeywords:'Linux,CentOS,Mysql'de......
  • 关于Mysql中文字段的排序
    发表这个帖子是因为产品的一个需求,按照名称首字母正序排序。目前所有的库默认的字符集都是utf8mb4,排序规则是utf8mb4_general_ci,这种排序规则不支持按中文的拼音首字母......
  • MSSQL PIVOT和UNPIVOT使用说明
    一、版本要求1.数据库的最低版本要求为SQLServer2005或更高。2.必须将数据库的兼容级别设置为90或更高。3.查看我的数据库版本及兼容级别。如果不知道怎么看数据库......
  • mysql8主从复制(一主三从) docker
    一、准备挂载文件为了将配置文件在宿主机做挂载,先运行测试镜像拷贝配置文件1、拉取镜像dockerpullmysql:8.0.262、创建测试容器mysql-demodockerrun-it-p330......
  • sqlmap简单使用
    先安装python,再将sqlmap的解压文件复制到python根目录中windows下sqlmap主要命令pythonsqlmap.py-h        //查看帮助信息pythonsqlmap.py-u"url"......
  • 数据仓库SQL代码规范
    1.命名规则:数据库、表、列、索引等名称应使用有意义、易于理解和记忆的命名方式。应使用小写字母和下划线,避免使用大写字母和特殊字符。应避免使用保留字和关键字作为名......
  • Mysql常用语法详解
    一、数据库创建数据库createdatabase数据库名;查询所有数据库showdatabases;查看正在创建的数据库信息showcreatedatabase数据库名;删除数据库dropdatabas......
  • SQL注入
    【有回显SQL注入】判断注入类型:由于输入的数据id是数字,我们并不知道服务器将id的值认为是字符还是数字,因此我们需要先来判断是数字型注入还是字符型注入(虽然从源码看......
  • MySQL创建数据库(CREATE DATABASE语句)
    在 MySQL 中,可以使用 CREATEDATABASE 语句创建数据库,语法格式如下:CREATEDATABASE[IFNOTEXISTS]<数据库名>[[DEFAULT]CHARACTERSET<字符集名>] [[DEFAUL......