标签: sql

C# - 关闭Sql对象的最佳实践

如果你有一个带Sqlaccess的C#函数,是否必须关闭所有对象/句柄,或者在退出函数后自动清理所有内容

例如:

void DoSqlStuff()
{
    SqlConnection sqlConn = new SqlConnection(...);
    SqlCommand cmd = new SqlCommand(...);
    SqlDataReader sqlData= null;

    sqlConn,Open();
    sqlData = cmd.ExecutReader();


    while(sqlData.Read())
    {
         ...
    }
}
Run Code Online (Sandbox Code Playgroud)

关闭SqlConn和SqlData是可选的,推荐的还是必需的?

谢谢.

c# sql

11
推荐指数
1
解决办法
2万
查看次数

按顺序或并行启动存储过程

我们有一个每晚运行的存储过程,反过来启动了许多其他程序.其中一些程序在逻辑上可以与其他一些程序并行运行.

  • 如何向SQL Server指示过程是应该并行还是串行运行 - 即:异步启动还是阻塞?
  • 并行运行它们的含义是什么,请记住,我已经确定进程不会竞争表访问或锁定 - 只是总磁盘io和内存.在大多数情况下,他们甚至不使用相同的表格.
  • 如果其中一些程序是相同的程序,只是使用不同的参数,这是否重要?
  • 如果我异步启动一对或多个程序,SQL Server中是否有一个好的系统然后等待它们两个完成,或者我是否需要让它们每个都在某处设置一个标志并定期检查和轮询标志WAITFOR DELAY

目前我们还在使用SQL Server 2000.

作为旁注,这很重要,因为主程序是响应从大型机系统完成从服务器到服务器的数据而启动的.大型机转储每晚大约需要2个小时,我们无法控制它.因此,我们一直在努力寻找缩短处理时间的方法.

sql t-sql sql-server parallel-processing sql-server-2000

11
推荐指数
1
解决办法
2万
查看次数

查看包含相同列的多个表

我有四个包含完全相同列的表,并且想要创建所有四个视图,以便我可以一起查询它们.

这可能吗?

(由于繁琐的原因,我不能/不允许将它们组合起来,这会使这无关紧要!)

sql database union

11
推荐指数
3
解决办法
3万
查看次数

在PHP中,每页有多少个DB调用是可以的?

我在LAMP设置上有共享主机.显然,每页对Db的调用越少越好.但是有多少太多了?二?十?一百?好奇人们的想法.

php sql performance lamp

11
推荐指数
1
解决办法
5574
查看次数

如何在包含最大值的表中查找记录?

虽然这个问题看起来很简单,但它有点棘手.

我有一个包含以下列的表:

table A:
  int ID
  float value
  datetime date
  varchar(50) group
Run Code Online (Sandbox Code Playgroud)

我想获取包含按"group"列分组的最大"date"的记录的"ID"和"value".像"每个群体的最新价值是什么?"

我可以得到每个组及其最大日期:

SELECT group, MAX(date) FROM A GROUP BY group; -- I also need the "ID" and "value"

但我想拥有最高日期的记录的"ID"和值.

在A和结果之间建立联接可能是答案,但是无法知道MAX(日期)引用哪条记录(如果"日期"重复).

有人可以帮忙吗?

sql select datetime group-by max

11
推荐指数
1
解决办法
2万
查看次数

SQLite中WHERE子句中的聚合函数

简单地说,我有一个表,其中包括一个时间戳列.我想获得具有最新(即最大值)时间戳的行.目前我这样做:

SELECT * FROM table ORDER BY timestamp DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)

但我宁愿做这样的事情:

SELECT * FROM table WHERE timestamp=max(timestamp)
Run Code Online (Sandbox Code Playgroud)

但是,SQLite拒绝此查询:

SQL error: misuse of aggregate function max()
Run Code Online (Sandbox Code Playgroud)

文件证实了这一行为(页面底部):

聚合函数只能在SELECT语句中使用.

我的问题是:是否有可能编写一个查询来获取具有最大时间戳的行而不排序选择并将返回的行数限制为1?这似乎应该是可能的,但我想我的SQL-fu不适合鼻烟.

sql sqlite aggregate-functions where-clause

11
推荐指数
1
解决办法
4万
查看次数

来自Joel Spolsky文章的SQL问题

来自Joel Spolsky 关于漏洞抽象的 文章:

[C]某些SQL查询比其他逻辑上等效的查询慢几千倍.一个着名的例子是,如果你指定"a = b和b = c和a = c",那么某些SQL服务器要比你只指定"where a = b和b = c"那样快得多,即使结果集也是如此是一样的.

有谁知道这个细节?

sql query-optimization

11
推荐指数
2
解决办法
3148
查看次数

如何在SQL中计算带小数的百分比?

如何在SQL中将其转换为小数?下面是等式,我得到答案为78(整数),但真正的答案是78.6(带小数)所以我需要显示这个,否则报告将不会达到100%

(100 * [TotalVisit1]/[TotalVisits]) AS Visit1percent
Run Code Online (Sandbox Code Playgroud)

sql sum decimal

11
推荐指数
2
解决办法
7万
查看次数

是否有类似Oracle SQL中的SUM函数的PRODUCT函数?

我有一个同事正在寻找这个,我不记得曾经遇到过这样的事情.

是否有合理的技术可以让你模拟它?

SELECT PRODUCT(X)
FROM
(
    SELECT 3 X FROM DUAL
    UNION ALL 
    SELECT 5 X FROM DUAL
    UNION ALL
    SELECT 2 X FROM DUAL
)
Run Code Online (Sandbox Code Playgroud)

会产生30

sql oracle

11
推荐指数
1
解决办法
2万
查看次数

左外连接在两列性能问题上

我正在使用类似于以下形式的SQL查询:

SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.person_uid = table2.person_uid
AND table1.period = table2.period
Run Code Online (Sandbox Code Playgroud)

而且它要么太慢,要么死机,因为它至少需要4分钟才能返回.如果我要将其更改为:

SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.person_uid = table2.person_uid
WHERE table1.period = table2.period
Run Code Online (Sandbox Code Playgroud)

然后它工作正常(尽管没有返回正确数量的列).有什么方法可以加快速度吗?

更新:如果我切换后一个查询的最后两行,它会做同样的事情:

SELECT col1, col2
FROM table1
LEFT OUTER JOIN table2
ON table1.period = table2.period
WHERE table1.person_uid = table2.person_uid
Run Code Online (Sandbox Code Playgroud)

更新2: 这些实际上是我加入的观点.不幸的是,它们位于我无法控制的数据库上,因此我无法(轻松)对索引进行任何更改.我倾向于同意这是一个索引问题.我会等一会儿才接受答案,以防有一些神奇的方法来调整我不知道的查询.否则,我会接受当前的答案之一,并尝试找出另一种方法来做我想做的事情.感谢大家的帮助到目前为止.

sql oracle join left-join oracle10g

11
推荐指数
2
解决办法
9万
查看次数