如何确定EXPLAIN结果中列出的派生表?我派生的表似乎没有任何可以使用的密钥,我认为这意味着需要进行一些优化.
选择声明:
EXPLAIN SELECT *
FROM vw_environment_deployment_statuses v
WHERE asset_id=47;
Run Code Online (Sandbox Code Playgroud)
查看SQL:
SELECT
`ac`.`asset_id` AS `asset_id`,
`es`.`environment_id` AS `environment_id`,
`d1`.`deployed_date` AS `last_deployed_date`,
`d1`.`revision` AS `last_deployed_revision`,
`d2`.`deployed_date` AS `last_successful_deployed_date`,
`d2`.`revision` AS `last_successful_deployed_revision`,
`e`.`acronym` AS `environment`,
`v3`.`count_is_failed` AS `last_deployed_is_failed`
FROM (((((((((`asset_configurations` `ac`
JOIN `vw_deployments` `d1`
ON ((`ac`.`id` = `d1`.`asset_configuration_id`)))
JOIN `vw_deployments` `d2`
ON ((`ac`.`id` = `d2`.`asset_configuration_id`)))
JOIN `servers` `s`
ON ((`ac`.`server_id` = `s`.`id`)))
JOIN `environments_servers` `es`
ON ((`s`.`id` = `es`.`server_id`)))
JOIN `environments` `e`
ON ((`es`.`environment_id` = `e`.`id`)))
JOIN `vw_last_environment_deployment_statuses` `v1`
ON (((`ac`.`asset_id` = …Run Code Online (Sandbox Code Playgroud) 我试图实现一个性能监视工具,我想监视内存和CPU等基本内容.
我试图通过使用性能计数器这样做,因为我相信这是在C#中查询进程性能的"正确"方法,这是一些示例代码:
class Program
{
static void Main(string[] args)
{
while (true)
{
var pcs = Process.GetProcesses()
.Select(p => new PerformanceCounter("Process", "Working Set - Private", p.ProcessName));
var sw = Stopwatch.StartNew();
foreach (var pc in pcs)
pc.NextValue();
Console.WriteLine($"Time taken to read {pcs.Count()} performance counters: {sw.ElapsedMilliseconds}ms");
Thread.Sleep(1000);
}
}
}
Run Code Online (Sandbox Code Playgroud)
所以很明显〜在我的系统上查询进程大约12.5毫秒是不可接受的慢.它应该如何完成?
我已经在这篇文章中提到了一个相关问题:性能计数器读取访问速度非常慢 - 任务管理器如何做到这一点?
但我意识到我在那篇文章中并不够具体,并且问了错误的问题.我真的想知道我怎么能用性能计数器做我想做的事情,或者根本不可能做到这一点?
编辑1:
我正在运行Windows 10 Pro 1607 - Build 14393.479
我的数据库中有一些列,大多数是varchar 255s.它们只被访问一次,但是对于登录用户,每次加载/请求时它们被加载一次.(大多数情况下它们包含用户偏好等内容).
我的问题是,我应该在这些列上创建索引吗?我已经在其他列上获得了索引,这些索引在多个查询中使用,而不是只读取一次并像这些列一样存储.
这是我的查询:
SELECT B.RECORDID, A.ITEMCODE, A.ITEMNAME, A.STOCKINHAND, B.SALEPRICE
FROM ITEMMASTER A, STOCKENTRY B
WHERE A.ITEMID = B.ITEMID
AND RECORDID = (SELECT MAX(RECORDID) FROM STOCKENTRY
WHERE ITEMID = A.ITEMID)
AND A.STOCKINHAND > 0
AND B.SALEPRICE > 0
AND B.INVOICEDATE IS NOT NULL
ORDER BY A.ITEMNAME, B.INVOICEDATE;
Run Code Online (Sandbox Code Playgroud)
表B(StockEntry)可能包含一个或多个记录,而表A(ItemMaster)肯定只有一个ItemID的行.
如果我删除WHERE子句中的子查询,它将显示一行或多行.我觉得通过WHERE子句中的子查询选择max(RecordID)会降低查询速度.我在RecordID,InvoiceDate,ItemID上有索引,但MySQL日志仍显示此查询效果不佳.由于某种原因,我无法更改列序列.
有没有更好的方法来优化此查询?
我有一个表user_notifications有1100000条记录,我必须运行以下查询,但完成查询需要3分钟以上才能改善获取时间.
SELECT `user_notifications`.`user_id`
FROM `user_notifications`
WHERE `user_notifications`.`notification_template_id` = 175
AND (DATE(sent_at) >= DATE_SUB(CURDATE(), INTERVAL 4 day))
AND `user_notifications`.`user_id` IN (
1203, 1282, 1499, 2244, 2575, 2697, 2828, 2900, 3085, 3989,
5264, 5314, 5368, 5452, 5603, 6133, 6498..
)
Run Code Online (Sandbox Code Playgroud)
IN块中的用户ID 有时高达1k.
为了优化我已经索引user_id和表中的notification_template_id列user_notification.
我们的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 Server中),其中所有没有异常的子查询都已使用临时表重写,以提高性能.
举个例子,所有的查询都是这样的:
SELECT something
FROM (SELECT * FROM T1 WHERE condition1)
JOIN ...
Run Code Online (Sandbox Code Playgroud)
被重写为这样:
SELECT *
INTO #tempTable
FROM T1
WHERE condition1
SELECT something
FROM #tempTable
JOIN ...
Run Code Online (Sandbox Code Playgroud)
这里还建议所有子查询都应该避免使用临时表.
基于给定的事实,是否应该用临时表替换所有子查询?如果不是什么时候应该考虑另一个?
Graph数据库(特别是Neo4j)中搜索查询的时间复杂度是多少?
我和我有关系数据.我很困惑使用Relational数据库或Graph数据库来存储该数据.因此,我希望根据特定数据库的查询的性能和时间复杂性来存储数据.但是,我无法找到Graph数据库查询的性能和时间复杂度.
谁能帮我吗 ?
relational-database time-complexity neo4j graph-databases query-performance
所以我有这个功能.
假设我有数百万的帖子.
我该如何优化此功能?
def fun
Post.all.each do |post|
if post.user.present?
post.active = true
else
post.active = false
end
post.save
end
end
Run Code Online (Sandbox Code Playgroud)
就像这样做更少,具有更好的性能,因为这不是一个非常好的方法.
ruby performance ruby-on-rails query-performance ruby-on-rails-4
什么是更快执行-编写联接或执行子查询?喜欢
select *
from table A
where A.fieldAValue =(select fieldAValue from table B where fieldXValue =101) ;
Run Code Online (Sandbox Code Playgroud)
我的理由是,选择正确的sql的决定还取决于表中数据的结构/定义方式。我是对还是错?
sql ×5
mysql ×4
performance ×3
oracle ×2
c# ×1
indexing ×1
neo4j ×1
ruby ×1
sql-server ×1
sql-tuning ×1
windows ×1