Subject | Re: [firebird-support] Re: Index key size |
---|---|
Author | Geoff Worboys |
Post date | 2014-10-01T02:51:58Z |
Dmitry Yemanov dimitr@... [firebird-support] wrote:
same (335 character) size, and that works, so it must be the
multi-segment overhead that is killing it.
On a test database with page size 4096 I just tried these:
CREATE INDEX myindex
ON testtable COMPUTED BY
(CAST(afield || 'a' AS VARCHAR(169)) COLLATE WIN1252_NOCASE);
that one ((169 * 6) + 9 = 1023) works.
CREATE INDEX myindex
ON testtable COMPUTED BY
(CAST(afield || 'a' AS VARCHAR(170)) COLLATE WIN1252_NOCASE);
that one ((170 * 6) + 9 = 1029) fails with:
"key size exceeds implementation restriction for index".
Which seems to confirm what you've said.
thanks
--
Geoff Worboys
Telesis Computing Pty Ltd
> IIRC, unicode derived case/accent insensitive collations useThat fits. For example I can create an expression index of the
> six bytes per character encoding. This gives us 2010 bytes
> which is pretty near the 1/4 page size. Given that some
> overhead should be taken into account, the key length may in
> fact overflow the limit.
> I'm not absolutely sure this is your case, but it could be.
same (335 character) size, and that works, so it must be the
multi-segment overhead that is killing it.
On a test database with page size 4096 I just tried these:
CREATE INDEX myindex
ON testtable COMPUTED BY
(CAST(afield || 'a' AS VARCHAR(169)) COLLATE WIN1252_NOCASE);
that one ((169 * 6) + 9 = 1023) works.
CREATE INDEX myindex
ON testtable COMPUTED BY
(CAST(afield || 'a' AS VARCHAR(170)) COLLATE WIN1252_NOCASE);
that one ((170 * 6) + 9 = 1029) fails with:
"key size exceeds implementation restriction for index".
Which seems to confirm what you've said.
thanks
--
Geoff Worboys
Telesis Computing Pty Ltd