标签: sqlperformance

LINQ-to-Entities摆脱了sp_executesql

我正在尝试使用数据库引擎优化顾问来优化我的数据库,我面临的问题是我的SQL事件探查器跟踪显示使用了大量的查询sp_executesql- 并且顾问程序无法处理这些查询.看起来这些查询来自我正在使用的LINQ到实体,所以只是好奇是否有任何方法可以使LINQ-to-Entities直接调用语句.

linq sql-server linq-to-entities sqlperformance sql-server-2008

3
推荐指数
1
解决办法
2105
查看次数

如何以有效的方式处理重复的键插入而不引发异常

我的案例场景将参数传递给一个过程,该过程仅执行插入操作。但两个线程可能会尝试传递相同的值。

如何处理这种情况而不引发异常并使用最少的锁?

我的性能要求是每秒至少 10k 插入。

编辑:列是唯一的。时间戳在插入之前可能会被更改(调整)。

t-sql sql-server nonblocking transaction-isolation sqlperformance

3
推荐指数
1
解决办法
4398
查看次数

SUBQUERY总表现与案例总和表现

我必须在where子句的基础上总结一些列,以便更好地理解我在这里实现一个临时表

declare @tbl table(a int ,b int,c int)
insert into @tbl values(1,2,3)
insert into @tbl values(2,2,3)
insert into @tbl values(1,3,1)
insert into @tbl values(1,2,3)
insert into @tbl values(1,2,3)
Run Code Online (Sandbox Code Playgroud)

并且用于找出a,b,c ob的总和a,b,c的值; 我正在使用以下查询

 SELECT (
         SELECT SUM(a) from @tbl where a=1         
         )AS a ,          
          (SELECT SUM(b) from @tbl where b=2

         )AS b ,         
          (SELECT SUM(c) from @tbl where c=3

         )AS c
Run Code Online (Sandbox Code Playgroud)

我问我的一个朋友对这项工作进行单行查询,他建议我按行

select sum((case  when a=1 then a  else null end)),
        sum((case  when b=2 then b  else null end)),
        sum((case  when c=3 …
Run Code Online (Sandbox Code Playgroud)

sql sqlperformance sql-server-2008-r2

3
推荐指数
1
解决办法
3110
查看次数

SQL Server慢插入 - SqlBulkCopy性能

我有一个拥有3000万行的数据库.PK聚集索引是生成的代码GUID.

表格如下:

CREATE TABLE [dbo].[events](
    [imageEventGUID] [uniqueidentifier] NOT NULL,
    [imageSHAID] [nvarchar](256) NOT NULL,
    [queryGUID] [uniqueidentifier] NOT NULL,
    [eventType] [int] NOT NULL,
    [eventValue] [nvarchar](2050) NULL,
    [dateOfEvent] [datetime] NOT NULL,
 CONSTRAINT [PK_store_image_event] PRIMARY KEY CLUSTERED 
(
    [imageEventGUID] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
) ON [PRIMARY]

GO
Run Code Online (Sandbox Code Playgroud)

简单地说它是一个图像搜索引擎.

  • imageEventGUID 是代码唯一标识符,
  • imageSHAID 是图像URL的SHA256
  • queryGUID 是生成FK的代码(为简洁起见,从create语句中排除)
  • eventType 是一个分配给它是什么类型的事件的数字
  • eventValue通常是图像的URI,例如" http://mywebpage.com/images/image123456789.jpg "

我定期使用非常标准的代码将via SqlBulkCopy(从a DataTable)插入到此表中:

using (SqlBulkCopy …
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server sqlperformance

3
推荐指数
1
解决办法
3882
查看次数

SQL UPDATE:一个语句中的多个列还是多个单列语句?

执行UPDATE具有多个列的一个语句是否更有效

UPDATE myTable 
SET [col1] = [col1] + 1, 
[col2] = [col2] + 1,
[col3] = [col3] + 1,
... 
[colN] = [colN] + 1
Run Code Online (Sandbox Code Playgroud)

或者UPDATE每个单列有多个语句?

UPDATE myTable SET [col1] = [col1] + 1
UPDATE myTable SET [col2] = [col2] + 1
UPDATE myTable SET [col3] = [col3] + 1
...
UPDATE myTable SET [colN] = [colN] + 1
Run Code Online (Sandbox Code Playgroud)

sql sql-server performance sqlperformance

2
推荐指数
1
解决办法
1万
查看次数

从大表中选择LIKE时,SQL Server 2012性能不佳

我有一个包含〜1M行的表,并对它运行以下SQL:

select * from E where sys like '%,141,%'
Run Code Online (Sandbox Code Playgroud)

执行需要2-5秒(返回~10行),我需要它至少快10倍,是否可以通过SQL Server 2012实现?

样本sys值(sys值长度范围为5到1000个字符):

1,2,3,7,9,10,11,12,14,17,28,29,30,33,35,37,40,41,42,43,44,45,46,47,48,50,51,53,55,63,69,
72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,97,109,110,111,113,117,
119,121,122,123,124,130,131,132,133,134,135,139,141,146
Run Code Online (Sandbox Code Playgroud)

表的DDL:

CREATE TABLE [dbo].[E](
    [o] [int] NOT NULL,
    [sys] [varchar](8000) NULL,
    [s] [varchar](8000) NULL,
    [eys] [varchar](8000) NULL,
    [e] [varchar](8000) NULL,
 CONSTRAINT [PK_E] PRIMARY KEY CLUSTERED 
(
    [o] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

t-sql sqlperformance sql-server-2012

2
推荐指数
1
解决办法
795
查看次数

当具有相同名称的表已经存在时,使用mysql innodb重命名大型表的最佳实践

我使用Mysql 5.5 .. + INNODB和Windows Server。

案例(先简单然后再案例):

我有2个表1GB,名称new_carcar表1GB。

我每隔10小时carnew_car表格替换表格,而不是手动(按代码自动)-快速完成(实际网站数据)很重要。

我读了(说在innodb中删除了它的问题):http : //www.mysqlperformanceblog.com/2011/02/03/performance-problem-with-innodb-and-drop-table/

解决方案1:

DROP TABLE car;
RENAME TABLE new_car TO car;
Run Code Online (Sandbox Code Playgroud)

解决方案2(最后放置-可能不会阻止表访问在放置期间发生的访问):

RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
DROP TABLE temp_car;
Run Code Online (Sandbox Code Playgroud)

解决方案3(截断快速删除表并创建空表,然后在执行删除操作后应该很快):

TRUNCATE TABLE car;
DROP TABLE car;
RENAME TABLE new_car TO car; 
Run Code Online (Sandbox Code Playgroud)

解决方案4:

RENAME TABLE car TO temp_car;
RENAME TABLE new_car TO car;
TRUNCATE TABLE temp_car;
DROP TABLE temp_car;
Run Code Online (Sandbox Code Playgroud)

哪种解决方案是最好的,为什么或请写其他更好的解决方案?

谢谢

mysql sql performance sqlperformance database-performance

2
推荐指数
1
解决办法
6131
查看次数

执行"alter"后MSSQL 2012查看速度更快

我有一个情境/上下文,其中特定视图在返回结果之前需要120秒.在执行简单的ALTER(或删除/创建)时,视图需要1到2秒.这怎么可能?我们如何解决这个问题 - 因为我们没有可以帮助我们的专用DBA.由于我们拥有链接服务器设置(MSSQL Server 2012抱怨这一点),因此无法制作索引视图.

以下是有关设置的信息.

TL; DR View_MAIN在一段时间后需要120秒.当我们在View_X,View_Y和View_MAIN上执行ALTER视图而不改变任何内容时,性能再次正常为1到2秒.


View_MAIN

SELECT 
   column1, column2, column3, column4, column5
FROM View_X

UNION ALL

SELECT 
   column1, column2, column3, column4, column5
FROM View_Y
Run Code Online (Sandbox Code Playgroud)

View_X

SELECT
   LTRIM(RTRIM(table1.a)) as column1,
   table2.b COLLATE Latin1_General_CI_AS as column2,
   table1.c as column3,
   CAST(table3.d AS DATETIME) as column4,
   'XXXXXX' as column5
FROM
   [linkedserver01].[DATABASE_IDN].[dbo].[dataForX] table1
   LEFT OUTER JOIN [linkedserver02].[DATABASE_INFM] as table2
   ON table2.id = table1.id
   LEFT OUTER JOIN [linkedserver02].[DATABASE_PIK] as table3
   ON table3.id = table1.id
Run Code Online (Sandbox Code Playgroud)

View_Y

SELECT
   LTRIM(RTRIM(table1.a)) as column1,
   table2.b COLLATE Latin1_General_CI_AS …
Run Code Online (Sandbox Code Playgroud)

sql-server sqlperformance sql-view

2
推荐指数
1
解决办法
98
查看次数

替代WHERE子句中的多个concats?

我有一个像这样的巨大查询:

SELECT 'Tipification', COUNT(*) TOTAL, to_char(INITDATE,'YYYY-MM-DD')
FROM (
    SELECT (TYPE || ' \ ' || SUBTYPE || ' \ ' || PROBLEM ) Triplet, INITDATE 
    FROM TABLE 
    WHERE USER IS NOT null 
        AND (INITDATE >= TO_DATE('2016-12-01 00:00', 'YYYY-MM-DD HH24:MI:SS')) 
        AND (INITDATE <= TO_DATE('2016-12-31 23:59', 'YYYY-MM-DD HH24:MI:SS')) 

        AND ( (TYPE || ' \ ' || SUBTYPE || ' \ ' || PROBLEM) = 'aaa \ bbb \ ccc' 
            OR (TYPE || ' \ ' || SUBTYPE || ' \ ' || …
Run Code Online (Sandbox Code Playgroud)

sql oracle concatenation sqlperformance

2
推荐指数
1
解决办法
114
查看次数

在WHERE中使用Oracle内置UPPER函数会导致SELECT语句的性能不佳?

我们的Oracle数据库应用程序包含一个名为PERSON
This Table的表包含一个名为的列.PERSON_NAME
此外,我们INDEX在此列上有一个加速SELECT使用此列的列

所以当我们使用以下SQL语句时性能很好

SELECT *
FROM PERSON
WHERE 1=1
AND PERSON_NAME = '  Yajli  '
;
Run Code Online (Sandbox Code Playgroud)

但在某些商业案例中,
我们需要通过搜索来PERSON_NAME区分大小写

所以我们尝试遵循SQL语句

SELECT *
FROM PERSON
WHERE 1=1
AND UPPER(PERSON_NAME) = UPPER('  YajLi  ')
;
Run Code Online (Sandbox Code Playgroud)

但它导致我们的BAD性能和SELECT查询在这种情况下需要花费很多时间

任何帮助如何一起提高SELECT两种情况的性能
*搜索方式PERSON_NAME不区分大小写
*搜索PERSON_NAME方式区分大小写

sql oracle sqlperformance query-performance sql-tuning

2
推荐指数
1
解决办法
2876
查看次数