我在SQL Server中对视图运行了一个相当复杂的查询,其形式如下:
SELECT *
FROM myview, foo, bar
WHERE shared=1 AND [joins and other stuff]
ORDER BY sortcode;
如上所示的查询计划显示了在最终SELECT之前的Sort操作,这是我所期望的。只有35条匹配记录,查询耗时不到2秒。
但是如果我添加TOP 30,查询几乎需要3分钟!使用SET ROWCOUNT同样很慢。
查看查询计划,现在似乎是在连接和筛选器之前对myview中的所有2+百万记录进行排序。
这种“排序”在查询计划上显示
这更像是一个设计问题,但也与SQL优化有关。
我的项目必须将大量记录导入到数据库中(超过10万条记录)。同时,该项目具有检查每条记录的逻辑,以确保其满足可配置的标准。然后,它会在数据库中将该记录标记为无警告或有警告。插入和警告检查在一个导入过程中完成。
对于每个条件,它都必须查询数据库。查询需要连接另外两个表,有时还需要在条件中添加额外的嵌套查询,例如
select * from TableA a
join TableB on ...
join TableC on ...
where
(select count(*) from TableA
where TableA.Fie
我必须每天有一些SQL查询,它通常涉及连接,我想知道哪种方式是最合适的连接,例如在这个表中
A("a",x,y)
B("b",'a',z,w)
其中A和B是主键,
哪种更好些呢?
SELECT *
FROM a,b
WHERE a.a=b.a AND a.x<constant
或
SELECT *
FROM (SELECT * FROM a WHERE x < constant) t, b
WHERE t.a=b.a
这意味着,最好先做where子句,然后做连接,或者我可以按where进行连接和过滤
谢谢!
背景
我有一个用OrientDB中的图形表示的模型。该模型由几个类组成,其中包括A和B。类与关系has连接,作为从A到B的边缘。边缘还将A连接到其他类:
A ---has--> B
A ---has--> C
问题
如果B的属性具有具有给定RecordID的A的has边缘,则需要更新它的属性。
我的解决方案
目前,我正在选择从给定的has开始的属于B类的所有边的目标/输出顶点。这是可行的,但我觉得我错过了一个更简单的解决方案。
UPDATE (SELECT expand(out('has')[@class = 'B']) FROM #11:1) SE
我已经阅读了许多来自SO的帖子,我理解where子句和on子句中过滤的区别。但这些示例中的大多数都是在右表上进行过滤(当使用左连接时)。如果我有如下查询:
select * from tableA A left join tableB B on A.ID = B.ID and A.ID = 20
返回值不是我所期望的。我认为它首先过滤左边的表,只获取ID = 20的行,然后使用tableB进行左连接。
当然,这在技术上应该与执行以下操作相同:
select * from tableA A left join table B on A.ID = B.ID where A.ID = 20
但我认为
我想知道为什么当您将一个键上的两个表连接到一个exists子查询中时,连接必须发生在WHERE子句中,而不是FROM子句中。
这就是我的例子:
从条款中加入:
SELECT payer_id
FROM Population1
WHERE NOT EXISTS
(Select *
From Population2 join Population1
On Population2.payer_id = Population1.payer_id)
加入WHERE条款:
SELECT payer_id
FROM Population1
class A(Base):
number = models.IntegerField(default=None)
...
class B(Base):
head_number = models.IntegerField(default=None)
...
有两个模型彼此无关,如何在django orm中使用annotate编写下面的查询呢?
Select * from A
inner join B on A.number = B.head_number
我试过用extra(),但我想在annotate()上用它。而且它不能改变任何模型。有什么办法吗?
如何编写查询,更新表videos,并在average为max()的情况下将字段name的值设置为'something‘,或者如何更新表,其中average具有按大小计算的第二个值!
我认为查询一定是这样的!
UPDATE videos
SET name = 'something'
WHERE average IN (SELECT `average`
FROM `videos`
ORDER BY `average` DESC
LIMIT 1)
但
我有一个相对简单的数据库,包含三个表,一个用于orders,一个用于products,另一个用于将订单链接到不同的产品(orders_products)。请参阅我检索产品的查询:
SELECT
p.product_id,
p.name,
@confirmed_nb := COUNT(DISTINCT IF(o.confirmed_on IS NOT NULL AND o.fulfilled_on IS NULL, o.order_id, NULL)) AS confirmed_nb,
@fulfilled_nb := COUNT(DISTINCT IF(o.f
Neo4j有一个“连接结果节点”复选框选项,我收集到这个选项后,会在最初的查询之后运行第二个查询来连接节点。 例如 MATCH (n:User)
where n.Verified = 'false'
return n
order by n.followers DESC
Limit 40 该查询返回40个相互连接的节点。虽然这可以在Neo4j浏览器中工作,但我不能让它在Neo4j bloom中连接。那么问题是,在幕后连接结果节点的第二个查询是什么? 谢谢
我如何优化下面的SQL?这个查询永远不会运行:(
SELECT DISTINCT CONNECT_BY_ROOT a.dst_ID_key AS root_ID_key, a.src_ID_key
FROM fact_table a
CONNECT BY NOCYCLE PRIOR a.src_ID_key = a.dst_ID_key
START WITH a.dst_ID_key IN (SELECT b.ID_key
FROM TableA b
JOIN TableB
如何将PostgreSQL查询更改为mongodb调用?我在上列出了相同的用例,我想通过使用滞后或引导之类的方法来计算两个日志条目之间的增量时间。mongodb中有类似Postgres的延迟/引导语法吗?
select
index,
starttime,
endtime,
starttime - lag(endtime) over(order by starttime asc) as delta
from test
我在看,看起来映射/减少/终结应该这样做。映射id,开始和结束时间,减少什么都不做,然后在完成过程中对它自己做一个内部连接(双for)。我几乎可以,某种
我在查询中有一些东西我必须编辑,我不明白。
连接的表有4个:票证、任务、tickets_users、用户。整个查询并不重要,但在文章末尾有一个示例。困扰我的是,这种代码在其他表中多次使用:
(SELECT name
FROM users
WHERE users.id=tickets_users.users_id
) AS RequesterName,
这是一个包含用户和tickets_users连接的表的子查询吗?这是什么?
WHERE users.id=tickets_users.users_id
如果这是一种加入,我会预料到:
ON users.id = tickets_users.use
这是
我正在尝试使用sum()函数。它只工作于SELECT查询,但当我在UPDATE query.Here my SELECT查询上的子查询中尝试该查询时,它给出了错误的值
SELECT
sum(i.pr_pur_cost_price*i.quantity) AS net_amount
FROM
product_purchases AS p
LEFT JOIN
product_purchase_item AS i
ON
p.product_purchase_item_id=i.product_purchase_item_id
WHERE
p.insert_oper
我有两个表具有相同的列,并让它们进行内连接,如下所示,我正在尝试获取内连接中未采用的列。我将在spark-sql代码中使用它。
select A.pension, B.pension
from Db1.table1 A, Db2.table2 B
where to_date(A.rdt) = '2019-06-20' and A.state = 'ohio' and A.empno= B.empno;
我试过使用UNION ALL,但是花费了比系统超时更多的时间,没有添加子句。
select A.pension
from Db1.table1 A left ou
我好像漏掉了什么。我一直在读,在我读过的大多数文章中,你应该使用一个连接,而不是一个子选择。然而,运行一个快速的实验本身显示,子查询在执行时间上取得了很大的胜利。
试图得到所有的人的名字,谁已经出价(我认为表是自己的话),结果是折叠。
这个连接需要10秒。
select U.firstname
from Bid B
inner join [User] U on U.userName = B.[user]
这个带有子查询的查询耗时3秒。
select firstname
from [User]
where userName in (select [user] from bid)
为什么我的实验不
我试图通过使用索引来提高某些查询的性能,并且注意到每次使用SHOW index FROM TableB;时,查询的EXPLAIN中的rows列的输出都发生了变化。
例如:
mysql> EXPLAIN Select A.id
From TableA A
Inner join TableB B
On A.address = B.address And A.code = B.code
Group by A.id
Having count(distinct B.id) = 1;
+----+-------------+-------+-
我最近被介绍了视图的概念,我发现它们对将复杂的查询分成几个部分有很大的帮助。
我的问题是,当我开始从视图进行查询时,是否会有任何效率上的劣势,而这些查询又是从其他视图查询的,等等。
举个例子,我会有:
view1 -> query from tables A, B & C
view2 -> query from tables D, E & F
view3 -> query joining view1 & view2
当查询view3而不是设计一个连接表A、B、C、D、E和F的查询时,会有速度上的劣势吗?
如果我选择使用视图方法,在view1、view2