我注意到Firebird为单个表创建了重复的列,因此在查询中使用了错误的索引,导致查询速度变慢。请举例如下。
我有2个具有相同列和索引的表,但在检查表结构时,一个表显示重复的列
Table A : Name VARCHAR(30)
Age INTEGER
BIRTH_DATE TIMESTAMP
Indices : Name, Birth_date (Asc), Birth_date(Desc)
Table B : Name VARCHAR(30)
Age INTEGER
BIRTH_DATE TIMESTAMP
Name VARCHAR(30)
Age INTEGER
BIRTH_DATE TIMESTAMP
Indices : Name, Birth_date (Asc), Birth_date(Desc)
当使用表C加入表并按Birth_date排序时,表A使用的是Birth_date索引Ordered,但表B不是。
请帮忙!这背后的原因是什么?谢谢。
答案 0 :(得分:1)
我刚遇到一个问题,即允许创建重复列。这个请求
SELECT a.RDB$FIELD_NAME
FROM RDB$RELATION_FIELDS a
WHERE a.RDB$FIELD_NAME like '%COLUMN_NAME%'
显示了两个COLUMN_NAME行。通过复制粘贴其他地方的字段,很明显一列有尾随空格,而另一列有回车符+换行符(CRLF),然后是尾随空格。
FlameRobin向导用于创建列。我对它的看法是使用了复制粘贴并插入了CRLF。 Excel和其他软件可以为您做到这一点。尽管如此,FlameRobin,FlameRobin的驱动程序和FireBird都应该防范它。
我们通过制作一些在列名中包含违规CRLF的DDL来删除违规列。