可能重复:
是否有充分的理由对T-SQL关键字使用大写?
简单的问题.我个人发现一串小写字符比一串大写字符更易读.是一些旧的/流行的SQL味道敏感或什么?
以供参考:
select
this.Column1,
case when this.Column2 is null then 0 else this.Column2 end
from dbo.SomeTable this
inner join dbo.AnotherTable another on this.id = another.id
where
this.Price > 100
Run Code Online (Sandbox Code Playgroud)
与
SELECT
this.Column1,
CASE WHEN this.Column2 IS NULL THEN 0 ELSE this.Column2 END
FROM dbo.SomeTable this
INNER JOIN dbo.AnotherTable another ON this.id = another.id
WHERE
this.Price > 100
Run Code Online (Sandbox Code Playgroud)
前者对我来说似乎更具可读性,但我更经常地看到后一种方式.
对于任何显着大小的表,下面的代码都非常慢.(100,1000等...)罪魁祸首是实例化我的对象new T()
.请注意,这不是我最终确定的代码,我只是将其中的部分内容删除,以便更容易地进行分析.一旦我将代码重构成形状,实例化和初始化将一起发生.
有什么方法可以加快速度吗?我可能会忘记一些非常简单的事情,或者我可能会被剔除.希望是前者.
public static IList<T> ToList<T>(this DataTable table) where T : Model, new()
{
T[] entities = new T[table.Rows.Count];
// THIS LOOP IS VERY VERY SLOW
for (int i = 0; i < table.Rows.Count; i++)
entities[i] = new T();
// THIS LOOP IS FAST
for (int i = 0; i < table.Rows.Count; i++)
entities[i].Init(table, table.Rows[i]);
return new List<T>(entities);
}
Run Code Online (Sandbox Code Playgroud)
编辑更多信息:
任何给定的构造函数ModelType
将如下所示:
public ModelType()
{
_modelInfo = new ModelTypeInfo();
}
Run Code Online (Sandbox Code Playgroud)
任何给定的构造函数ModelTypeInfo
将简单地设置一些字符串和字符串[]值,并且该类的唯一作用是提供值集.
编辑更多信息:
因为它似乎是一个热门话题,所以在打破对象构造和初始化之前,这是我的方法对于实数的看法:
public …
Run Code Online (Sandbox Code Playgroud) 我在发票和信用卡交易之间存在多对多的关系,我正试图将这些交易映射到一起.思考问题的最佳方法是将TransactionInvoiceMap想象为二分图.对于每个连接的子图,找到所有发票的总和以及该子图中所有交易的总和.在我的查询中,我想返回为每个子图计算的值以及它们与之关联的事务ID.相关交易的总数应该相同.
更明确地说,给出以下交易/发票
Table: TransactionInvoiceMap
TransactionID InvoiceID
1 1
2 2
3 2
3 3
Table: Transactions
TransactionID Amount
1 $100
2 $75
3 $75
Table: Invoices
InvoiceID Amount
1 $100
2 $100
3 $50
Run Code Online (Sandbox Code Playgroud)
我想要的输出是
TransactionID TotalAsscTransactions TotalAsscInvoiced
1 $100 $100
2 $150 $150
3 $150 $150
Run Code Online (Sandbox Code Playgroud)
请注意,发票2和3以及事务2和3是逻辑组的一部分.
这是一个显然有效的解决方案(简化,名称已更改),但速度非常慢.我很难弄清楚如何优化它,但我认为这将涉及将子查询消除到TransactionInvoiceGrouping中.随意提出完全不同的东西.
with TransactionInvoiceGrouping as (
select
-- Need an identifier for each logical group of transactions/invoices, use
-- one of the transaction ids for this.
m.TransactionID,
m.InvoiceID,
min(m.TransactionID) over (partition by m.InvoiceID) …
Run Code Online (Sandbox Code Playgroud) 我不确定这是一个ASP.NET MVC特定的东西或一般的ASP.NET,但这是正在发生的事情.我有一个动作过滤器,通过使用响应过滤器删除空格:
public class StripWhitespaceAttribute : ActionFilterAttribute
{
public StripWhitespaceAttribute ()
{
}
public override void OnResultExecuted(ResultExecutedContext filterContext)
{
base.OnResultExecuted(filterContext);
filterContext.HttpContext.Response.Filter = new WhitespaceFilter(filterContext.HttpContext.Response.Filter);
}
}
Run Code Online (Sandbox Code Playgroud)
当与OutputCache属性一起使用时,我对Response.WriteSubstitution的"donut hole caching"调用不起作用.第一次和第二次页面加载传递给WriteSubstitution的回调被调用,之后在输出缓存到期之前不再调用它们.我注意到这不仅仅是这个特殊的过滤器,而是Response.Filter上使用的任何过滤器......我错过了什么?
我也忘了提到我在没有使用MVC动作过滤器属性的情况下通过附加到global.asax中的PostReleaseRequestState事件并在那里设置Response.Filter值来尝试这个...但是仍然没有运气.
我们的一个问题是我们的出站电子邮件服务器有时很糟糕.用户将在我们的应用程序中触发电子邮件,并且应用程序可能需要大约30秒才能实际发送.让我们更糟糕,并承认我们甚至没有在后台线程上这样做,所以在这段时间内用户完全被阻止.SQL Server数据库邮件已被提议作为此问题的解决方案,因为它基本上实现了一个消息队列,并且比我们的第三方电子邮件主机更接近,响应更快.对我们来说,这也很容易实现,因为它只是将一个调用替换SmtpClient.Send
为执行存储过程.我们的大部分应用程序电子邮件都包含PDF,XLS等,我看到这些附件的大小高达20MB.
使用数据库邮件处理我们所有的应用程序电子邮件对我来说都不好,但由于实施成本极低,我很难说出任何人.我们的生产数据库服务器功能太强大,所以我不确定它是否也无法处理负载.任何想法或更安全的替代品?
我们遇到合并复制问题.我们的发布者运行SQL Server 2008,而我们的两个订阅者运行2005.我们的发布者正试图ALTER TABLE Foo SET (LOCK_ESCALATION)
向我们的订阅者发送命令.我想我记得在SQL Server 2008中看到这个命令是新的,如果是这样,那么命令在我们的2005服务器上会失败是有意义的.但是,我们的合并复制是为2005兼容性设置的.
模式脚本'if object_id(N'[dbo].[Users]')不是null exec('ALTER TABLE [dbo].[Users] SET(LOCK_ESCALATION = TABLE)')'无法传播给订阅者.
关于为什么我们的出版商会尝试这样做的任何想法?
编辑:我们2008服务器的兼容级别设置为"Sql Server 2005(90)"
我有以下扩展方法,并希望使它更通用,所以我不必为我们域中的每个类实现它.
public static IList<User> ToList(this DataTable table)
{
IList<User> users = new List<User>();
foreach (DataRow row in table.Rows)
users.Add(User.FromDataRow(row));
return users;
}
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这个令人沮丧的限制?
编辑:下面的段落是bollocks,但我保留它,所以其中一个答案对未来的读者有意义:
用户以及我的其他类实现IDataModel
. IDataModel
只需要1种方法FromDataRow(DataRow row)
.在函数原型中放置一个显然没有帮助.
我正在审查我的几个网站,以确保我的SEO基础被覆盖.相关网站上没有私人网页,我们希望将所有网页编入索引.无论如何,包括robots.txt文件,即使不需要,也会让我的网站看起来更有信誉,对Google来说更重要吗?
c# ×2
sql-server ×2
asp.net-mvc ×1
caching ×1
emailrelay ×1
filter ×1
formatting ×1
generics ×1
many-to-many ×1
performance ×1
readability ×1
replication ×1
sql ×1
t-sql ×1