"创建表格为" SQL数据仓库中的函数在后台创建统计信息,还是必须手动创建(就像我在正常情况下创建"创建表"语句?)
答案 0 :(得分:4)
从当前版本开始,始终必须创建关于表的列级统计信息,无论它是使用普通viewcontroller
还是使用CTAS public static void main(String[] args) {
try {
BufferedReader bufferedReader = new BufferedReader(new FileReader(new File("/path/to/test.txt")));
String line;
StringBuilder stringBuilder = new StringBuilder();
int offset = 7;
while((line = bufferedReader.readLine()) != null) {
for(int i=0; i<line.length(); i++) {
if(i == offset) {
stringBuilder.append("xyz" + line.charAt(i));
} else if(i == line.length()-1) {
stringBuilder.append(line.charAt(i) +"\n");
} else {
stringBuilder.append(line.charAt(i));
}
}
}
System.out.println(stringBuilder);
bufferedReader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
创建的命令。为JOIN,WHERE子句,GROUP BY,ORDER BY和DISTINCT子句中使用的列创建统计信息也是一种好习惯。
关于使用CTAS创建的表,数据库引擎正确了解CREATE TABLE
中列出的表中有多少行,但不是列级统计级别。对于由CREATE TABLE AS...
创建的表,此默认值为1,000行。对于下面的示例,第一个表是使用CTAS创建的,有208行,第二个表包含来自第一个表的普通sys.partitions
和CREATE TABLE
,还有208行,但是{{1}相信它有1000个例如
手动创建任何列级统计信息将更正此编号。
总之,无论表格是如何创建的,都始终手动为重要列创建统计信息。