AllExperts > Ingres 
Search      
Ingres
Volunteer
Answers to thousands of questions
 Home · More Ingres Questions · Answer Library  · Encyclopedia ·
More Ingres Answers
Question Library

Ask a question about Ingres
Volunteer
Experts of the Month
Expert Login

Awards

About Us
Tell friends
Link to Us
Disclaimer

 
 
 
 
About Jean-Pierre Zuate
Expertise
Any questions about database Ingres (owned by Computer Associates then Ingres Corp) : - Ingres 6.4 - OpenINGRES from 1.0 to 2.0 - IngresII from 2.0 to 2.6 - Ingres R3, Ingres 2006 (Open Source version) - All tool around Ingres : ABF, Report Writer, Replicator, OpenROAD (3.5 to 2006), Ingres/NET Ingres/STAR, ...

Experience
16 years of computing experience as :
- AS400 programmer
- AIX / Ingres administrator and developer (OpenROAD and korn shell)
- Ingres DataBase Administrator
- Ingres expert - Data modelisation - ETL - Reporting - Many of Computer Associates sofwares - ITIL / CMDB / Change Management

Organizations
http://lafageconseil.fr

 
   

You are here:  Experts > Computing/Technology > Databases > Ingres > 10 tables query 2

Ingres - 10 tables query 2


Expert: Jean-Pierre Zuate - 3/2/2005

Question
Bon jour, Jean-Pierre,
Sorry, I don't understand the 'correct indices' part. Could you explain it a little more or, perhaps, add an example?

Another question. I've see that the optimizer timeout 'disappear' as I change the number of tables involved in the query (when I get off tables). What can be the cause of this?

Thanks.   
-------------------------
Followup To
Question -
Have you any idea about how to improve the performance of a ten tables based query (with k-joins)?
Answer -
Hi Miguel,

Your question is in FoxPro folder, and I'am an Ingres expert. Hope this question is for Ingres ... :-)

You can use QEP (Query Execution Plan). Here is how you can turn it on :
sql your_db
set qep
\g
set optimizeonly
\g
your bif select here
\g

Performance can be improved by :
--------------------------------
- correct indices
- appropriates statistic data for the DBMS (taken by optimizedb command)
- reorganisation ad'hoc

Correct indices :
-----------------
When you join 2 or more tables, take care of the correct where clause. Columns are to be joined from the left to the right (ie if your key is col1, col2 and col3 the correct where clause will involve col1 and col2 but not col2 and col3 [miss col1 in that case)

Appropriate statistics :
------------------------
A good optimizedb command is :
optimizedb -zh -zk mydb
-zh to see histograms
-zk to ask optimizedb to take stats on key columns only

Reorganisation ad'hoc :
-----------------------
On regular basis, take care to pass a MODIFY on each table and perhaps a CREATE INDEX (because sometimes, depend on create index option, modify delete indices).

A good regular administrative task on Ingres can be :
1/ modify and create index (to eliminate hole in data pages)
2/ optimizedb to take correct stats
3/ sysmod to reoganize system data tables (destructured by optimizedb)

Hope this help,
Jean-Pierre Zuate

Answer
Correct indices ...

When you access data through a SGBD/R, you "only" do join between columns. If you want your query to speed up, indices must exist when you run the query.

A short example ...

Suppose two tables, customer and bill.
Customer table look like this :
customer_number
customer_name,
customer_address

Bill table look like this :
bill_number
customer_number,
quantity_sum,
amount_sum

If, from the bill table, you need to know what are all the bill for one customer the query look like this :
select *
from bill
where customer_number = 'the requested number'

Correct indice mean if you don't have an object (an index in fact) well designed, you query can be very slow. In my example, the correct index is an index on the table bill for the column customer_number. In SQL something like :
CREATE INDEX bill_idx on bill (customer_number) with structure = hash

Performance depend on the pertinence of the columns involved in the index, the structure, and by all the parameter linked to the structure.

In Ingres, you have some differents structures, depend on the usage :
- heap : no sort here, no key. Fast for massive insert
- btree : good for partial key query. Very good if table have many update an few window for modify
- isam : same service as btree, but need to be reorganised (more) regulary
- hash : good for exact query (where each column of the key have an unique value in the query)

Now, my turn to have a question : what do you call "optimizer timeout" and how do you see it ?

JPz :-)

Add to this Answer   Ask a Question


 
User Agreement | Privacy Policy | Kids' Privacy Policy | Help
Copyright  © 2008 About, Inc. AllExperts, AllExperts.com, and About.com are registered trademarks of About, Inc. All rights reserved.