在编译C++代码时,GCC是否会尝试通过选择未标记inline关键字的内联函数来优化速度?
我得到(nolock)优化器提示允许"脏读",但在非常具体的情况下,这是一个坏主意?我从未(nolock)在组织中看到如此广泛的使用,这让我感到紧张.我想用用户故事来解释一下."保罗做A,彼得做B,X代替Y".
我已经阅读了SQL Server 2008 OPTIMIZE FOR UNKNOWN查询提示.我明白它是如何工作的.
不过,我有个问题在那里,并在使用它.它不能在UDF中指定.它可以在存储过程中指定.但是,这篇 MSDN博客文章陈述如下:
4.将查询移入存储过程可以将其置于单独的过程上下文中,并且可以是优化器可以看到该值的好方法(注意:这也适用于SQL 2000)
在我看来,传递给存储过程的任何参数都将被"嗅探",从而帮助SQL Server编译最佳执行计划.这意味着将重新访问/重新编译缓存的计划(不确定该机制).然而,这是令人困惑的,因为它否定了OPTIMIZE FOR UNKNOWN的全部需求.
关于查询提示的MSDN文章没有涵盖我的问题.
有人可以为我解答这个问题,理想情况下是指向微软的一些东西来解决这个问题.谢谢.
我一直在尝试优化以下两个嵌套循环:
def startbars(query_name, commodity_name):
global h_list
nc, s, h_list = [], {}, {}
query = """ SELECT wbcode, Year, """+query_name+"""
FROM innovotable WHERE commodity='"""+commodity_name+"""' and
"""+query_name+""" != 'NULL' """
rows = cursor.execute(query)
for row in rows:
n = float(row[2])
s[str(row[0])+str(row[1])] = n
nc.append(n)
for iso in result:
try:
for an_year in xrange(1961, 2031, 1):
skey = iso+str(an_year)
h_list[skey] = 8.0 / max(nc) * s[skey]
except:
pass
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?谢谢.
__builtin_expect来自GCC的程序员可以使用它来显示哪些变体经常出现且很少见.但 __builtin_expect只有"真实"和"假"(0%或100%概率)
对于一些大型项目来说,获取个人资料反馈很难变化(-fprofile-arcs),有时程序员确实知道,他在程序的某些方面有多大的分支概率.
可以给编译器一个提示,即分支的概率> 0%且<100%?
gcc ×2
sql-server ×2
built-in ×1
c++ ×1
inline ×1
nested-loops ×1
optimization ×1
prediction ×1
python ×1
query-hints ×1
sql ×1