[EMAIL PROTECTED] wrote:

> Now i create a table.
> Follow is the create statement:
> 
> CREATE TABLE "DBA"."ITEM"
> (
>       "I_ID"               Integer    NOT NULL,
>       "I_TITLE"               Varchar (60) ASCII,
>       "I_A_ID"               Integer,
>       "I_PUB_DATE"               Date,
>       "I_PUBLISHER"               Varchar (60) ASCII,
>       "I_SUBJECT"               Varchar (60) ASCII,
>       "I_DESC"               Varchar (500) ASCII,
>       "I_RELATED1"               Integer,
>       "I_RELATED2"               Integer,
>       "I_RELATED3"               Integer,
>       "I_RELATED4"               Integer,
>       "I_RELATED5"               Integer,
>       "I_THUMBNAIL"               Varchar (40) ASCII,
>       "I_IMAGE"               Varchar (40) ASCII,
>       "I_SRP"               Fixed (17,2),
>       "I_COST"               Fixed (17,2),
>       "I_AVAIL"               Date,
>       "I_STOCK"               Integer,
>       "I_ISBN"               Char (13) ASCII,
>       "I_PAGE"               Integer,
>       "I_BACKING"               Varchar (15) ASCII,
>       "I_DIMENSIONS"               Varchar (25) ASCII,
>       PRIMARY KEY ("I_ID")
> )
> 
> After creating the table,I do a query.
> Follow is the query statement in a applation:
> 
> SELECT J.i_id,J.i_thumbnail from item I, item J where (I.i_related1 = 
> J.i_id or I.i_related2 = J.i_id or I.i_related3 = J.i_id or 
> I.i_related4 = 
> J.i_id or I.i_related5 = J.i_id) and I.i_id = ?
> 
> The "?" is a parameter.I find there are happen a huge 
> performance quetion.
> 
> I make a query plan for the query statement with "explain".I 
> find there are 
>  "table scan" for table "J" and the cost is very large.
> 
> I feel "OR" is the reason.Index maybe be invalidated when 
> using "OR" key 
> word.
> 
> Can you tell me how to dealing when a statement using "OR" and how to 
> optimize the operation?
> 
> There is a notice that the "I.i_id = ?" only be used once.

Hi,

you are right the "OR" is the reason. 
Because of the Ors the optimize couldn't use any 
better strategy than table scan.
I would suggest do use an union.
You could try it with 

SELECT J.i_id,J.i_thumbnail 
from item I, item J 
where I.i_related1 = J.i_id and I.i_id = ?
union all 
SELECT J.i_id,J.i_thumbnail 
from item I, item J 
where I.i_related2 = J.i_id and I.i_id = ?
union all
SELECT J.i_id,J.i_thumbnail 
from item I, item J 
where I.i_related3 = J.i_id and I.i_id = ? 
union all
SELECT J.i_id,J.i_thumbnail 
from item I, item J 
where I.i_related4 = J.i_id and I.i_id = ?
union all
SELECT J.i_id,J.i_thumbnail 
from item I, item J 
where I.i_related5 = J.i_id and I.i_id = ?

Kind regards
Holger

--
MaxDB Discussion Mailing List
For list archives: http://lists.mysql.com/maxdb
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to