我正在构建一个Sharepoint应用程序,它在多个数据库(在同一个MS服务器上)上运行单个SQL查询。就速度而言,我在连接字符串中指定的数据库重要吗?因此,如果我的查询如下:
SELECT col1, col2 FROM db1.table UNION ALL
SELECT col1, col2 FROM db2.table UNION ALL
SELECT col1, col2 FROM db3.table
如果我的连接字符串如下所示,会有什么不同吗?
Server=***;Database=db1; Integrated Security=SSPI; Connection Tim
我有多个SQL查询,它们一个接一个地运行,以获得一组数据。在每个查询中,都有一组与其他查询完全相同的表连接。例如:
Query1
SELECT * FROM
Product1TableA A1
INNER JOIN Product1TableB B on A1.BId = B.Id
INNER JOIN CommonTable1 C on C.Id = B.CId
INNER JOIN CommonTable2 D on D.Id = B.DId
...
Query2
SELECT * FROM Product2TableA A2
INNER JOIN Product2TableB B on
我的SQL Server代码在查询执行时间上完全难倒了我。
我有很多(大约60个)连接需要做,并且我的原始子查询丰富查询开始不可预测地执行。然后,我遵循公认的智慧,把它分成了两张临时表。执行此操作的批处理如下所示:
1. SELECT INTO #tempIndexTable
2. SELECT INTO #TableA FROM #tempIndexTable LEFT JOIN {a bunch of sub queries}
3. SELECT INTO #TableB FROM #tempIndexTable LEFT JOIN {a bunch of different sub qu
在SQL中,我们可以总是编写一个内连接语句作为主查询和子查询吗?
例如,
select * from gifts g where g.giftID in (select giftID from sentGifts);
可以执行连接并显示sentGifts表中发送的礼物,但它不能显示sentTime,因为它在子查询中。
我有两个sql查询,如下
SELECT rc.stateId,rs.stateName FROM
(SELECT DISTINCT cityid FROM HolidayPackageCity) AS hpc
INNER JOIN
(SELECT cityid,stateid FROM RegCity WHERE countryCode='IN' AND stateId IS NOT NULL) AS rc
ON hpc.cityId=rc.cityId
INNER JOIN
RegState AS rs
ON rc.stateId=rs.stateId
vs
SELEC
无论您使用哪种连接类型,如果WHERE子句检查一个表的pk =另一个表的fk,那么只要连接结果集,它就会变成内部连接,这是真的吗?换句话说,如果您的sql查询包含如下内容:
“SELECT... from A Left Join B on ( ... ) E,F Full Outer join G On (A.pk = G.fk) ... WHERE A.pk = G.fk和A.pk = B.fk等...”
在上面的查询中,A左连接到B,而G在其fk上外连接到A。但是,由于where子句具有这两个检查,因此整个查询简化为如下所示:
"Select ... from A INNER Jo
我正在使用SQL Server 2008R2。
我有以下设置:
-- Query #1
SELECT * FROM
Product P
INNER JOIN ProductComments C ON C.ProductId = P.ProductId
-- Query #2
SELECT * FROM
GetAllProducts() P
CROSS APPLY GetCommentsOfProduct(P.ProductId) C
GetAllProducts()在哪里
CREATE FUNCTION GetAllProducts
(
)
RETURNS TABLE
AS
试图了解SQL Server内存优化表(内存中的oltp)上事务隔离级别的工作方式。
如果我执行以下查询:
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
BEGIN TRANSACTION
SELECT *
FROM tm.Tasks
显示一条错误消息:
仅对于自动提交事务,才支持使用读提交隔离级别访问内存优化表。它不支持显式或隐式事务。使用表提示(如WITH (快照))为内存优化表提供受支持的隔离级别。
现在,如果我通过添加表提示来修改查询,它可以工作:
SET TRANSACTION ISOLATION LEVEL READ CO
假设我有一个名为Foo的表,其中有一个主键FooID和一个整数非惟一列Bar。由于某种原因,在SQL查询中,我必须多次将表Foo与自身连接起来,如下所示:
SELECT * FROM Foo f1 INNER JOIN Foo f2 ON f2.Bar = f1.Bar INNER JOIN Foo f3 ON f3.Bar = f1.Bar...
我必须通过LINQ to Entities实现这一点。
正在做什么
ObjectContext.Foos.Join(ObjectContext.Foos, a => a.Bar, b => b.Bar, (a, b) => new
我正在从一个在Server上有大约400个连接的表中进行select,每个连接选择这个表的一部分并写入一个文件;select语句使用表上的索引,每个连接独立运行2.5分钟。当我尝试使用nolock运行400个类似的查询时,总查询时间增加到40分钟。有人知道我可以在哪里进行优化,以便将400查询的速度提高到与运行一个查询相同的速度吗?
为了更好地解释,下面是查询的示例:
SELECT * FROM TABLENAME WITH (NOLOCK) WHERE Id BETWEEN 0 AND 1999999
SELECT * FROM TABLENAME WITH (NOLOCK) WHERE
我有一个有趣的例子,SQL Server返回的结果集是不同的,这取决于查询是本地执行还是远程执行。
实际上,如果我执行以下查询:
SELECT p.ID AS Id
FROM csdb.users.People AS p
LEFT JOIN csdb.users.Accounts AS a ON p.ID = a.IdentityId
然后执行左连接,并返回633行。但是,如果我远程执行查询,如下所示:
SELECT p.ID AS Id
FROM quantdb.csdb.users.People AS p
LEFT JOIN quantdb.csdb.users.Accounts AS
我用的是入口。我有存储函数,从另一个表返回随机关键字。如果我在SQL查询中插入此函数,则在每一行上接收相同的结果(相同的关键字)。如何在SQL中轻松实现对每一行调用此函数?
SELECT ID, StoredFunction() AS Result
FROM Table
_
ID Result
-------------------
1 | 1 result
2 | 1 result
3 | 1 result
我需要
ID Result
-------------------
1 | 1 result
2 | 2 result
3 | 3 res
我正在尝试编写一个简单的rest API来连接到我的sql Server数据库,并执行一个简单的查询来从数据库中检索数据。
我将遵循本教程:
这就是我困惑的地方:
该示例有一个服务器初始化文件,如下所示:
var express = require('express'); // Web Framework
var app = express();
var sql = require('mssql'); // MS Sql Server client
// Connection string parameters.
var sqlConfig = {
u
我在SQL Server中遇到了一个较大的查询问题,我将其追溯到这段代码,该代码没有按预期执行。
SELECT item_name,item_num,rst_units
FROM tbl_item left join tbl_sales_regional on item_num=rst_item
WHERE rst_month=7 and rst_customer='AB123'
第一个表(tbl_item)有10,000条记录。第二个表(tbl_sales_regional)对于所显示的标准有83个。
执行计划显示SQL Server已重写为内部联接,并因此返回83个结果,
我有一个表A和一个表B,我想加入它们,我只需要几个列,所以我认为最好从表a和表b创建子查询,然后加入它们,就像我试图说明的那样:
select * from (Select * from (SELECT A,B,C FROM table1 where A =4756937 and B=290) as a
join
(SELECT D,E,F FROM table2) as b
on a.A = b.E )as c
join
(SELECT G,H,I,J
FROM table2) as d
on c.F = d.H
我在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+百万记录进行排序。
这种“排序”在查询计划上显示
我有两张桌子如下所示
我在两个表上都有如下所示的综合索引:
users表有一个复合索引:(login_type_id,language_id,enabled,level) 地址表有一个复合索引:(user_id,city_id,enabled)
我想执行以下查询
select * from users u
left join address adr
on u.id = adr.user_id
where u.login_type_id = 1
and u.langauge_id = 1
and u.enabled = true
and adr.city_id in (1,2,3,4,
MariaDB文档提到,SQL标准从来不允许子查询(派生表)中的ORDER BY子句。
表示SQL查询。
SELECT
field1
, field2
FROM (
SELECT
field1
, field2
FROM
table1
ORDER BY field2
) alias
不被SQL标准所允许。
根据SQL标准,“表”(以及FROM子句中的子查询)是一组无序的行。表中的行(或FROM子句中的子查询中的行)不按任何特定顺序排列。这就是为什么优化器可以忽略您指定的ORDER子句的原因。实际上,SQL标准甚至不允许ORDER子句出现在这个子