根据MySQL文档,使用where意味着:WHERE子句用于限制哪些行与下一个表匹配或发送到客户端。
据我了解,这意味着如果您的sql语句有where条件,则您的解释中会出现“Using where”额外信息。根据我的经验,这似乎意味着 MySQL 存储引擎发现索引无法覆盖某些列,并且必须检索行数据。例如:
谁能解释一下Using where的真正含义?
经过大量的工作,我终于得到了一个相当复杂的查询,非常流畅地工作,并很快返回结果.
它在开发和测试方面运行良好,但现在测试速度已大大减慢.解释查询在开发上需要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 …
当从参数化查询更改为非参数化查询时,我无法理解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) 我已执行查询并包含实际执行计划.有一个Hash Match是我感兴趣的,因为它的子树使用索引扫描而不是索引搜索.当我将鼠标悬停在此Hash Match上时,会出现一个名为"Probe Residual"的部分.我曾认为这是我加入的任何价值观.我在这里是正确的还是有更好的解释?
我遇到的第二个问题是它使用的索引.在我的例子中,我很确定这个特殊的连接正在加入两列.它正在扫描的索引中包含这两列,以及另一个未在连接中使用的列.我的印象是,这将导致索引搜索而不是扫描.我错了吗?
我有一个表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 Server Management STudio中是超高速的,并且在sp_ExecuteSQL下运行时超级慢.
这是否与在spExecuteSQL下运行时未执行的执行计划的缓存有关?
我正在阅读Grant Fritchey的"Dissecting SQL Server Execution Plans",它帮助我了解为什么某些查询很慢.
但是,我很难理解这种情况,简单的重写速度要快得多.
这是我的第一次尝试,需要21秒.它使用派生表:
-- 21 secs
SELECT *
FROM Table1 AS o JOIN(
SELECT col1
FROM Table1
GROUP BY col1
HAVING COUNT( * ) > 1
) AS i ON ON i.col1= o.col1
Run Code Online (Sandbox Code Playgroud)
我的第二次尝试快3倍,只是将派生表移出临时表.现在它快了3倍:
-- 7 secs
SELECT col1
INTO #doubles
FROM Table1
GROUP BY col1
HAVING COUNT( * ) > 1
SELECT *
FROM Table1 AS o JOIN #doubles AS i ON i.col1= o.col1
Run Code Online (Sandbox Code Playgroud)
我的主要兴趣是为什么从派生表转移到临时表会如此提高性能,而不是如何使其更快.
如果有人能告诉我如何使用(图形)执行计划诊断此问题,我将不胜感激.
Xml执行计划:https: //www.sugarsync.com/pf/D6486369_1701716_16980
编辑1
当我创建关于group by中指定的2 …
如何在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
有没有什么合适的资源可以让我们完全理解hive生成的解释计划?我曾尝试在 wiki 中搜索它,但找不到完整的指南来理解它。这是 wiki,它简要解释了解释计划的工作原理。但我需要有关如何推断解释计划的更多信息。 https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Explain
我有点困惑,需要一些建议。我用PostgreSQL 11数据库。我有这么简单的sql语句:
SELECT DISTINCT "CITY", "AREA", "REGION"
FROM youtube
WHERE
"CITY" IS NOT NULL
AND
"AREA" IS NOT NULL
AND
"REGION" IS NOT NULL
Run Code Online (Sandbox Code Playgroud)
youtube我在 sql 语句中使用的表有 2500 万条记录。我认为这就是为什么查询需要 15-17 秒才能完成。对于我使用该查询的 Web 项目,它太长了。我正在尝试加快请求。
我为 youtube 表创建了这样的索引:
CREATE INDEX youtube_location_idx ON public.youtube USING btree ("CITY", "AREA", "REGION");
Run Code Online (Sandbox Code Playgroud)
在这一步之后,我再次运行查询,但需要相同的时间才能完成。似乎查询不使用索引。我如何知道查询中是否使用了任何索引?
sql-server ×5
sql ×4
explain ×2
mysql ×2
couchbase ×1
hadoop ×1
hive ×1
hiveql ×1
join ×1
nosql ×1
performance ×1
postgresql ×1
t-sql ×1