标签: sql-execution-plan

mysql解释不同服务器上的不同结果,同一查询,同一个数据库

经过大量的工作,我终于得到了一个相当复杂的查询,非常流畅地工作,并很快返回结果.

它在开发和测试方面运行良好,但现在测试速度已大大减慢.解释查询在开发上需要0.06秒并且在测试中大致相同,现在测试时间为7秒.

解释略有不同,我不确定为什么这将是dev的解释

-+---------+------------------------------+------+------------------------------
---+
| id | select_type | table      | type   | possible_keys           | key
 | key_len | ref                          | rows | Extra
   |
+----+-------------+------------+--------+-------------------------+------------
-+---------+------------------------------+------+------------------------------
---+
|  1 | PRIMARY     |  | ALL    | NULL                    | NULL
 | NULL    | NULL                         |    5 |
   |
|  1 | PRIMARY     | tickets    | ref    | biddate_idx             | biddate_idx
 | 7       | showsdate.bid,showsdate.date |   78 |
   |
|  2 | DERIVED     | shows      | ALL    | biddate_idx,latlong_idx | NULL …

mysql join sql-execution-plan

6
推荐指数
2
解决办法
3029
查看次数

SQL Server查询计划的差异

当从参数化查询更改为非参数化查询时,我无法理解SQL Server中我的语句的估计查询计划的行为.

我有以下查询:

DECLARE @p0 UniqueIdentifier = '1fc66e37-6eaf-4032-b374-e7b60fbd25ea'
SELECT [t5].[value2] AS [Date], [t5].[value] AS [New]
FROM (
    SELECT COUNT(*) AS [value], [t4].[value] AS [value2]
    FROM (
        SELECT CONVERT(DATE, [t3].[ServerTime]) AS [value]
        FROM (
            SELECT [t0].[CookieID]
            FROM [dbo].[Usage] AS [t0]
            WHERE ([t0].[CookieID] IS NOT NULL) AND ([t0].[ProductID] = @p0)
            GROUP BY [t0].[CookieID]
            ) AS [t1]
        OUTER APPLY (
            SELECT TOP (1) [t2].[ServerTime]
            FROM [dbo].[Usage] AS [t2]
            WHERE ((([t1].[CookieID] IS NULL) AND ([t2].[CookieID] IS NULL)) 
            OR (([t1].[CookieID] IS NOT NULL) AND ([t2].[CookieID] …
Run Code Online (Sandbox Code Playgroud)

sql-server parameterized sql-execution-plan

6
推荐指数
1
解决办法
837
查看次数

SQL优化 - 基于约束值的执行计划更改 - 为什么?

我有一个表ItemValue,其中包含运行在2000兼容模式下的SQL 2005 Server上的数据,这些模式类似于(它是用户定义的值表):

ID    ItemCode     FieldID   Value
--    ----------   -------   ------
 1    abc123             1   D
 2    abc123             2   287.23
 4    xyz789             1   A
 5    xyz789             2   3782.23
 6    xyz789             3   23
 7    mno456             1   W
 9    mno456             3   45
                                 ... and so on.
Run Code Online (Sandbox Code Playgroud)

FieldID来自ItemField表:

ID   FieldNumber   DataFormatID   Description   ...
--   -----------   ------------   -----------
 1             1              1   Weight class
 2             2              4   Cost
 3             3              3   Another made up description
 .             .              x   xxx
 .             . …
Run Code Online (Sandbox Code Playgroud)

sql sql-server query-optimization sql-execution-plan

6
推荐指数
1
解决办法
2973
查看次数

T/SQL效率和执行顺序

关于SQL中语句的执行顺序,以下性能是否有明显区别?

SELECT * FROM Persons
WHERE UserType = 'Manager' AND LastName IN ('Hansen','Pettersen')
Run Code Online (Sandbox Code Playgroud)

和:

SELECT * FROM Persons
WHERE LastName IN ('Hansen','Pettersen') AND UserType = 'Manager'
Run Code Online (Sandbox Code Playgroud)

如果有任何差异,是否可能有一个链接等,你可以在哪里可以了解更多相关信息?

万分感谢,

凯尔

sql t-sql performance sql-execution-plan

6
推荐指数
1
解决办法
814
查看次数

SQL Server sp_ExecuteSQL和执行计划

我有一个查询,它在SQL Server Management STudio中是超高速的,并且在sp_ExecuteSQL下运行时超级慢.

这是否与在spExecuteSQL下运行时未执行的执行计划的缓存有关?

sql t-sql sql-server sql-server-2005 sql-execution-plan

6
推荐指数
1
解决办法
5048
查看次数

为什么在通过sp_executeSQL过程执行时,完全相同的SQL查询结果与不同的执行计划?

正如标题所述,我不明白为什么sp_executeSQL会生成与从Sql Management Studio运行查询完全不同的执行计划.

从SQL管理工作室运行时,我的查询将需要3秒钟,因为通过sp_executeSQL在管理工作室中运行的查询将花费5分钟.

我已经更新了统计数据,并查看了索引,但事实上仍然存在这样的事实:sp_executeSQL的执行计划比直接从我的管理工作室运行sql更糟糕.

所以这是我的问题:为什么执行计划在以这两种不同方式运行查询之间会有很大差异?

谢谢

t-sql sql-server sp-executesql sql-execution-plan

6
推荐指数
1
解决办法
3785
查看次数

使用TOP和ESCAPE更改查询计划和执行时间

其中一个查询(如下所示)需要90秒以上才能执行.它从一个相当大的表LogMessage返回~500行.如果ESCAPE N'~'从查询中删除它,它会在几秒钟内执行.同样,如果TOP (1000)删除它,它会在几秒钟内执行.查询计划Key Lookup (Clustered) PK_LogMessage, Index Scan (NonClustered) IX_LogMessage and Nested Loops (Inner Join)在第一种情况下显示.当从句ESCAPE N'~'TOP (1000)移除查询计划的变化,以及Clustered Index Scan (Clustered) PK_LogMessage.虽然我们正在寻找添加更多索引(可能在ApplicationName上),但我们想了解当前的情况.

正在生成查询Entity Framework,以防您想知道为什么以这种方式编写.实际查询也更复杂,但这是表现出相同行为的最短版本.

查询:

SELECT TOP (1000) 
    [Project1].[MessageID] AS [MessageID], 
    [Project1].[TimeGenerated] AS [TimeGenerated], 
    [Project1].[SystemName] AS [SystemName], 
    [Project1].[ApplicationName] AS [ApplicationName]
FROM
    (
        SELECT
            [Project1].[MessageID] AS [MessageID],
            [Project1].[TimeGenerated] AS [TimeGenerated],
            [Project1].[SystemName] AS [SystemName],
            [Project1].[ApplicationName] AS [ApplicationName]
        FROM
        (
            SELECT 
                [Extent1].[MessageID] AS [MessageID], 
                [Extent1].[TimeGenerated] AS [TimeGenerated], 
                [Extent1].[SystemName] AS [SystemName], …
Run Code Online (Sandbox Code Playgroud)

sql sql-server performance sql-server-2008-r2 sql-execution-plan

6
推荐指数
1
解决办法
919
查看次数

不同的参数大小会导致查询计划缓存效率低下

Nhibernate探查器显示有关查询计划的大量错误消息:

不同的参数大小会导致查询计划缓存使用效率低下

它还会引导您在http://nhprof.com/Learn/Alerts/UncachedQueryPlan中进行解释,并prepare_sql = true在构建会话时警告您使用参数.我这样做是流利的:

.ExposeConfiguration(configuration => configuration
    .SetProperty("current_session_context_class", "thread_static")
    .SetProperty("prepare_sql", "true")
    .SetProperty("generate_statistics", "true")
    )
Run Code Online (Sandbox Code Playgroud)

但似乎它没有工作,因为错误消息仍然存在.这是对OracleClientConfiguration的限制还是我做错了?

编辑提供有关此内容的更多信息......

在我的存储库中,我这样做

session.Query<TEntity>.Where(predicate).ToList();
Run Code Online (Sandbox Code Playgroud)

这就是电话

var value = ParameterRepository.First(p => (p.Pipeline.Id == pipelineId && p.Name == name));
Run Code Online (Sandbox Code Playgroud)

例如,这些是从此调用生成的两个SQL,并且nhibernate profiler显示为"不同的参数大小导致查询计划缓存使用效率低下"

select GUID1_12_,
       PARAMETER2_12_,
       PARAMETER3_12_,
       GUID4_12_
from   (select pipelineex0_.GUID_PIPELINE_EXEC_PARAMETER as GUID1_12_,
               pipelineex0_.PARAMETER_NAME               as PARAMETER2_12_,
               pipelineex0_.PARAMETER_VALUE              as PARAMETER3_12_,
               pipelineex0_.GUID_PIPELINE_TRACKING       as GUID4_12_
        from   FCT_PIPELINE_EXEC_PARAMETER pipelineex0_
        where  pipelineex0_.GUID_PIPELINE_TRACKING = 'A5916E73CF1E406DA26F65C24BFBF694' /* :p0 */
               and pipelineex0_.PARAMETER_NAME = 'lid' /* :p1 */)
where  rownum <= 1 /* …
Run Code Online (Sandbox Code Playgroud)

oracle nhibernate fluent-nhibernate sql-execution-plan

6
推荐指数
1
解决办法
814
查看次数

sql语句的哈希值

当我们在Oracle中执行任何sql语句时,会为该sql语句分配一个哈希值并将其存储到库缓存中.因此,稍后,如果另一个用户请求相同的查询,则Oracle会找到哈希值并执行相同的执行计划.但是,我对哈希值有一个疑问.我的意思是,如何生成哈希值?我的意思是,Oracle服务器是否使用某些算法,或者只是将sql字符串转换为某个数值.

从那时起,我正在阅读Pro Oracle SQL书籍,上面写着,

select * from employees where department_id = 60;

SELECT * FROM EMPLOYEES WHERE DEPARTMENT_ID = 60;

select /* a_comment */ * from employees where department_id = 60;
Run Code Online (Sandbox Code Playgroud)

将返回不同的哈希值,因为当执行sql语句时,Oracle首先将字符串转换为哈希值.但是,当我尝试这个时,它返回相同的哈希值.

SQL> select * from boats where bid=10;

no rows selected


Execution Plan
----------------------------------------------------------
Plan hash value: 2799518614

-------------------------------------------------------------------------------------
| Id  | Operation                   | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
-------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |       |     1 |    16 …
Run Code Online (Sandbox Code Playgroud)

sql oracle sql-execution-plan

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

Couchbase查询执行时间?

如何在Couchbase中计算查询时间和查询执行计划.是否有任何实用程序,如Oracle解释计划和Couchbase数据库中的tkprof?

编辑:


我试图看看哪个数据库最适合我的数据.所以我想尝试使用mysql,mongodb,couchbase.我尝试了三个不同数量的条目10k,20k,40k条目.

使用mysql,我可以使用"set profiling = 1"查看查询时间.使用此设置我在三种情况下运行查询1)没有索引主键,2)索引主键3)第二次运行相同的查询(以查看查询缓存的效果)

同样,我使用mongodb运行相同的测试,并以表格格式汇总我的结果.我想用couchbase运行相同的测试,看看它的性能如何.我试图搜索网络,但找不到任何我可以遵循以获得类似结果的内容.

下面是我的表(所有时间都是毫秒).带有大括号()的第二行显示第二次运行的查询时间.

Records Count       Mysql           MongoDB         CouchBase
        ___________________     _______________     ___________
        Without   | With        Without | With      With Index
        Index     | Index       Index   | Index 

10K     62.27325  | 8.537       3311    | 33
        (33.3135) | (3.27825)       (7) | (0)




20K     108.4075  | 23.238      132 | 39    
        (80.90525)| (4.576)     (17)    | (0)



40K     155.074  | 26.26725     48  | 10
        (110.42) | (10.037)     (42)    | (0)


对于couchbase,我想知道使用其密钥检索文档时的性能(类似于memcahed的功能).查询时间也使用其视图.

performance execution-time nosql sql-execution-plan couchbase

6
推荐指数
1
解决办法
4563
查看次数