我发现EXPLAIN SELECT查询在MySQL中非常有用,因为它提供了有关如何执行SQL的信息,并提供了分析的机会,例如,您应该添加的缺失索引,以便在执行查询本身和分析统计数据之前改进响应.
我的问题是:在像MS Sql,Firebird,Ingres这样的数据库中,是否有类似的命令?
在Firebird中我们有PLAN,但是非常弱,因为很多时候为了查看一个简单的错误,必须运行很长的查询.
最好的祝福,
Mauro H. Leggieri
按照https://github.com/kubernetes/contrib/blob/master/ingress/controllers/gce/README.md
我的 ingress.yaml示例如下所示:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: my-app
annotations:
kubernetes.io/ingress.allow-http: "false"
spec:
tls:
- secretName: my-app
rules:
- host: t.my-app.com
http:
paths:
- backend:
serviceName: my-app
servicePort: 80
Run Code Online (Sandbox Code Playgroud)
我希望它能够阻止所有 http 流量,但不幸的是这并没有发生!我仍然得到 443 和 80!我花了好几个小时试图了解注释是否有任何问题,但我根本找不到任何方法来推断它!
我正在寻找一个从Java 6应用程序中处理数据库死锁的好策略; 可能会有几个并行线程同时写入同一个表.如果数据库(Ingres RDMBS)检测到死锁,它将随机杀死其中一个会话.
考虑到以下要求,处理死锁情况的可接受技术是什么?
到目前为止,我提出的策略是这样的:
short attempts = 0;
boolean success = false;
long delayMs = 0;
Random random = new Random();
do {
try {
//insert loads of records in table 'x'
success = true;
} catch (ConcurrencyFailureException e) {
attempts++;
success = false;
delayMs = 1000*attempts+random.nextInt(1000*attempts);
try {
Thread.sleep(delayMs);
} catch (InterruptedException ie) {
}
}
} while (!success);
Run Code Online (Sandbox Code Playgroud)
它可以以任何方式改进吗?例如,等待固定数量(幻数)秒.是否有不同的策略可以产生更好的结果?
注意:将使用几种数据库级技术来确保死锁在实践中非常罕见.此外,应用程序将尝试避免调度同时写入同一个表的线程.上述情况只是"最糟糕的情况".
注意:插入记录的表被组织为堆分区表并且没有索引; 每个线程都会在其自己的分区中插入记录.
在大多数SQL产品中,我可以从没有表或虚拟表中选择如下:
-- Oracle
SELECT 1 FROM DUAL
-- Many other SQL products (including Ingres)
SELECT 1
Run Code Online (Sandbox Code Playgroud)
有时,我想在上面的语句中添加一个条件,以便根据条件检索0或1条记录
-- Oracle
SELECT 1 FROM DUAL WHERE 1 = 0
-- Many other SQL products (but not Ingres)
SELECT 1 WHERE 1 = 0
Run Code Online (Sandbox Code Playgroud)
但上述内容对Ingres 10.0不起作用.我该怎么做?
我正在经历规范可怕的遗留数据库的痛苦,并且发现了我认为DBMS的一个错误.
此查询返回我期望的结果:
SELECT DISTINCT RIGHT(SQUEEZE(thing_id), 2) AS thing_id, TRIM(thing_name)
FROM thing
ORDER BY thing_id, thing_name;
(16 rows)
Run Code Online (Sandbox Code Playgroud)
我第一次运行查询时,无意中在ORDER BY中使用了错误的列,如下所示:
SELECT DISTINCT RIGHT(SQUEEZE(thing_id), 2) AS thing_id, TRIM(thing_name)
FROM thing
ORDER BY thing_name, location;
(33 rows)
Run Code Online (Sandbox Code Playgroud)
请注意,唯一要更改的是ORDER BY,并且返回的行数从16增加到33.它提供的结果不是查询指定的DISTINCT.
我相信这是一个彻头彻尾的错误,但是同事说这是正常的,因为当我们通过"位置"进行排序时,会在结果中选择一个无形的.
ORDER BY是否会影响SELECT查询中返回的行数?
编辑:我有另一个人查看查询,我将查询复制到两个单独的文件,然后对它们运行diff命令.100%确定两个查询之间的唯一区别是ORDER BY中列出的列.
更新:Ingres已发布修补程序14301,其中包含错误修正:"错误126640(GENERIC)查询具有order-by表达式,而不同聚合返回的行数超出预期.order-by表达式中的列不在选择列表中."
即有问题的查询现在会导致错误,因为结果不正确.
在Oracle中,可以通过在"虚拟" rownum
列上进行过滤来限制在任意查询中返回的行数.请考虑以下示例,该示例最多将返回10行.
SELECT * FROM all_tables WHERE rownum <= 10
是否有简单,通用的方法在Ingres做类似的事情?
许多(大多数?几乎所有?)SQL方言都有办法执行这种类型的函数:date_add(MyDate,MyInterval)
我已浏览过所有文档,但我无法在Ingres中找到此功能.我的直接目标是获得"MyDate加3个月".有没有人知道是否有一种简单的方法可以做到这一点,我错过了?
注意:我意识到使用现有的SQL 可以实现这一点.但它将涉及:
对于Oracle,MySQL,PostgreSQL,SQL Server以及我能想到的所有其他东西来说,这是一个非常简单的SQL.这让我充满希望,我在某种程度上错过了一个更简单的替代方案.
我很好奇是否有可能从表中获取数据,并复制它但指定一个新的主键
例如,我希望获取具有列"question_id"的数据,该列充当表的唯一键,并将具有该question_id的表中的所有数据复制到同一个表中但使用新的question_id.
有关使用SQL是否可行的任何想法?
我的数据库是一个ingres数据库
提前致谢
我想知道是否有办法在Ingres的select查询中选择后续的一堆行.例如,可以使用tablename中的select first 500来选择前500行,但如果我想选择501到1000的行,有没有办法做到这一点?
我在使用一些遗留代码时遇到了一些问题.一张票要我写一个测试过程有效性的脚本; 但是,当脚本运行时,我不断收到此异常:
java.lang.IllegalArgumentException: No enum const class edu.cmu.s3.common.enums.RegistrationStatus.;
Run Code Online (Sandbox Code Playgroud)
对于记录,正在使用的数据库是旧的Ingres遗留系统,因此空值表示为空字符串 - 非常漂亮,我必须添加.
无论如何,看起来每当遇到空字符串时,它就会在创建枚举时失败.我检查了枚举,但它包含了这个成员:
BLANK("", "Blank")
Run Code Online (Sandbox Code Playgroud)
这会让我觉得空字符串确实是一个有效的参数,但它看起来并非如此.
CAN枚举使用空字符串作为参数,还是我需要更新比我最初假设更多的遗留代码?
谢谢您的帮助