I have a problem that has raised a couple of questions.

SITUATION:
I have a table called pr_persona that has a composite key comprising
pr_persona_db   CHAR(2)
pr_persona_id   INT(11) auto increment

On a separate table, rv_reservation, I have a foreign key that links to
pr_persona as follows
rv_reservation.rv_agent_id  VARCHAR(13)

I'm running MySQL version 3.23.40

PROBLEM:
When I run a SELECT statement of the following nature
SELECT rv_reservation.*, pr_persona.pr_name
FROM rv_reservation
LEFT JOIN pr_persona ON rv_reservation.rv_agent_id =
concat(pr_persona.pr_persona_db, pr_persona.pr_persona_id)
the optimiser does not join on the index - it performs a cross join.

Attempted solution 1: Created a new field on pr_persona called pr_persona_ix
VARCHAR(13) and populated it with the concatenation of pr_persona_db,
pr_persona.pr_persona_id and defined the field as a UNIQUE index.
I then changed the query to join ON rv_reservation.rv_agent_id =
pr_persona_ix
Success! - the optimiser uses the new index. However, this is not an optimal
solution because I have to populate the redundant pr_persona_ix field.

Attempted solution 2: Instead of creating the index described above, I
changed the PRIMARY index to UNIQUE and gave it an index name of
pr_persona_ix.
When I run the same query MySQL doesn't recognise the index name of
pr_persona_ix.

PROBLEM SUMMARY:
1. Why does the optimiser not use the PRIMARY index in the original case?
2. Why is the index name of my composite UNIQUE index not recognised?

Regards,
Mike Coppinger

----------
Resrequest Online Reservation Systems
Tel:   +27-11-476 4740
Fax:   +27-11-476 7235
Cell:  +27-82-774 0820
Email: [EMAIL PROTECTED]


-- 
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to