Hi
I test firebird 2.5.1 an found that Statements with IN or EXISTS don't use an
Index, example:
SELECT * FROM ARTICLE_CONTENTTREE_LINK WHERE ARTICLEID in (Select RELID FROM
ARTICLE WHERE DEFINEID=112435)
OR
SELECT * FROM ARTICLE_CONTENTTREE_LINK WHERE EXISTS
(Select RELID FROM ARTICLE WHERE DEFINEID=112435 AND
ARTICLE.RELID=ARTICLE_CONTENTTREE_LINK.ARTICLEID)
Plan:
------------------------------------------------------------------------------
PLAN (ARTICLE INDEX (RDB$PRIMARY45))
PLAN (ARTICLE_CONTENTTREE_LINK NATURAL)
Adapted Plan
PLAN (ARTICLE INDEX (PK_ARTICLE)) PLAN (ARTICLE_CONTENTTREE_LINK NATURAL)
------------------------------------------------------------------------------
In Firebird 1.5 I know this typ of Query are not optimized correctly... in
Firebird 2.1 I remember this problem are solved???
Know I test Firebird 2.5.1 and found that this problem still there... or again
there... or is this an mistake from me ?
The table structur:
------------------------------------------------------------------------------
/* Table: ARTICLE */
CREATE TABLE ARTICLE (
RELID INTEGER NOT NULL,
USERID INTEGER NOT NULL,
DEFINEID INTEGER,
CHANGED TIMESTAMP,
DATING TIMESTAMP,
TITLE BLOB sub_type 1 segment size 64,
PTITLE MINICMS_TITLE,
WTITLE MINICMS_TITLE,
TEASER BLOB sub_type 1 segment size 128,
PTEASER BLOB sub_type 1 segment size 128,
BODY BLOB sub_type 1 segment size 256,
PBODY BLOB sub_type 1 segment size 256,
ENABLED SMALLINT DEFAULT 1,
DELETED SMALLINT,
VALID_FROM TIMESTAMP,
VALID_TO TIMESTAMP,
SOURCE BLOB sub_type 1 segment size 64,
AUTHOR BLOB sub_type 1 segment size 64,
KEYWORDS BLOB sub_type 1 segment size 64,
NOTICE BLOB sub_type 1 segment size 256,
MAILING SMALLINT DEFAULT 0,
PROTECTLEVEL SMALLINT DEFAULT 10,
TYP SMALLINT DEFAULT 0,
URL BLOB sub_type 1 segment size 32,
EMAIL BLOB sub_type 1 segment size 32,
WEBTIP SMALLINT DEFAULT 0,
DATE_BEGIN TIMESTAMP,
DATE_END TIMESTAMP,
POSTCODE VARCHAR (8) character set ISO8859_1 collate ISO8859_1,
CITY VARCHAR (128) character set ISO8859_1 collate ISO8859_1,
COUNTRY SMALLINT,
NATION SMALLINT,
PRICEGROUP SMALLINT DEFAULT 0,
PRICEGROUP_ABO SMALLINT DEFAULT 0,
PRICEGROUP_ABO_FREE SMALLINT DEFAULT 0,
PUBLICITY_LINK INTEGER,
PARAMS BLOB sub_type 1 segment size 64,
QUERY_TITLE VARCHAR (128) character set ISO8859_1 collate ISO8859_1,
QUERY_TEXT BLOB sub_type 1 segment size 256,
EXEMPTION_LIMIT SMALLINT,
ROAYLTY_SHARE DOUBLE PRECISION,
QUERY_LOCAL MINICMS_QUERY_TEXT,
XMLDATA MINICMS_XMLDATA,
CALC_PUBLICITY_ARTICLE COMPUTED BY (CAST ( CASE WHEN
(PUBLICITY_LINK Is NULL) THEN 2 ELSE 1 END AS SMALLINT )),
KEY_INT1 INTEGER,
KEY_INT2 INTEGER,
KEY_INT3 INTEGER,
KEY_FLOAT1 DOUBLE PRECISION,
KEY_FLOAT2 DOUBLE PRECISION,
KEY_FLOAT3 DOUBLE PRECISION);
/* Primary keys definition */
ALTER TABLE ARTICLE ADD CONSTRAINT PK_ARTICLE PRIMARY KEY (RELID);
/* Foreign keys definition */
ALTER TABLE ARTICLE ADD CONSTRAINT FK_ARTICLE_PUBLICITY_LINK FOREIGN KEY
(PUBLICITY_LINK) REFERENCES ARTICLE (RELID) ON DELETE SET NULL ON UPDATE SET
NULL;
/* Indices definition */
CREATE INDEX FK_ARTICLE_PUBLICITY_LINK ON ARTICLE (PUBLICITY_LINK);
CREATE INDEX IDX_ARTICLE_DEFINEID ON ARTICLE (DEFINEID);
CREATE INDEX IDX_ARTICLE_MAILING ON ARTICLE (ENABLED, MAILING, DATING,
VALID_FROM, VALID_TO);
CREATE INDEX IDX_ARTICLE_USERID ON ARTICLE (USERID);
--------------------------------------------------------------------------
/* Table: ARTICLE_CONTENTTREE_LINK */
CREATE TABLE ARTICLE_CONTENTTREE_LINK (
TREEID INTEGER NOT NULL,
ARTICLEID INTEGER NOT NULL,
SORTKEY INTEGER,
PARAMS MINICMS_PARAMS);
/* Primary keys definition */
ALTER TABLE ARTICLE_CONTENTTREE_LINK ADD CONSTRAINT PK_ARTICLE_CONTENTTREE_LINK
PRIMARY KEY (TREEID, ARTICLEID);
/* Foreign keys definition */
ALTER TABLE ARTICLE_CONTENTTREE_LINK ADD CONSTRAINT
FK_ARTICLE_CONTENTTREE_LINK_AID FOREIGN KEY (ARTICLEID) REFERENCES ARTICLE
(RELID) ON DELETE CASCADE ON UPDATE CASCADE;
ALTER TABLE ARTICLE_CONTENTTREE_LINK ADD CONSTRAINT
FK_ARTICLE_CONTENTTREE_LINK_TID FOREIGN KEY (TREEID) REFERENCES CONTENTTREE
(RELID) ON DELETE CASCADE ON UPDATE CASCADE;
/* Indices definition */
CREATE UNIQUE INDEX IDX_ARTICLE_CONTENTTREE_LINK ON ARTICLE_CONTENTTREE_LINK
(ARTICLEID, TREEID);
--------------------------------------------------------------------------
with best regards
Nils Bödeker
--
_________________________________
Verlag Eugen Ulmer
Datenbanken und IT-Entwicklung
Nils Bödeker
Bürgerwohlsweg 7
D-28215 Bremen
Germany
Tel: +49 (0)421 - 3795020
Fax: +49 (0)421 - 3795021
Mobil: +49 (0) 172 - 7468066
[email protected]
www.ulmer.de / www.nbsoft.de
yahoo ID: nilsboedeker
Skype ID: nilsboedeker
Second Life: Nils Burt
ICQ ID: 206474523