I'm not an SQL expert and have a subquery problem. I have a query that
consists of a query inside of a query inside of a query. The two inner
subqueries work fine together and give me a list of "ids" for matching
records. And they do it very quickly. If I then take their results and
feed them to the outer query by hand, it also works fine - very fast.
But if I combine them so that they are nested, the system just locks
up. This doesn't seem rational to me. Can someone give me a hint as to
what I might be doing wrong?

In the attached output, I first show the indexes for each of the tables
in question. Then I show the two inner queries and the list they return.
Then how it works if I merge the results by hand. Then the final command
that locks the system. Oh, and the MySQL server version is 4.1.11.

Any help would be greatly appreciated...

Devon

-------------------

mysql> show index from Stage_Entries;
+---------------+------------+----------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
| Table         | Non_unique | Key_name             | Seq_in_index | 
Column_name      | Collation | Cardinality | Sub_part | Packed | Null | 
Index_type | Comment |
+---------------+------------+----------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
| Stage_Entries |          0 | PRIMARY              |            1 | ID         
      | A         |      176092 |     NULL | NULL   |      | BTREE      |       
  |
| Stage_Entries |          0 | Entries_SearchName_1 |            1 | SearchName 
      | A         |      176092 |     NULL | NULL   | YES  | BTREE      |       
  |
| Stage_Entries |          0 | Entries_SearchName_1 |            2 | ID         
      | A         |      176092 |     NULL | NULL   |      | BTREE      |       
  |
| Stage_Entries |          1 | EntryID              |            1 | EntryID    
      | A         |      176092 |     NULL | NULL   | YES  | BTREE      |       
  |
| Stage_Entries |          1 | ContinentID          |            1 | 
ContinentID      | A         |          17 |     NULL | NULL   |      | BTREE   
   |         |
| Stage_Entries |          1 | SubcontinentID       |            1 | 
SubcontinentID   | A         |       88046 |     NULL | NULL   | YES  | BTREE   
   |         |
| Stage_Entries |          1 | CountryID            |            1 | CountryID  
      | A         |        2229 |     NULL | NULL   | YES  | BTREE      |       
  |
| Stage_Entries |          1 | RegionID             |            1 | RegionID   
      | A         |       58697 |     NULL | NULL   | YES  | BTREE      |       
  |
| Stage_Entries |          1 | LastModifiedBy       |            1 | 
LastModifiedBy   | A         |          10 |     NULL | NULL   | YES  | BTREE   
   |         |
| Stage_Entries |          1 | Status               |            1 | Status     
      | A         |           5 |     NULL | NULL   | YES  | BTREE      |       
  |
| Stage_Entries |          1 | LastModifiedDate     |            1 | 
LastModifiedDate | A         |       19565 |     NULL | NULL   | YES  | BTREE   
   |         |
| Stage_Entries |          1 | SearchName           |            1 | SearchName 
      | NULL      |       88046 |     NULL | NULL   | YES  | FULLTEXT   |       
  |
| Stage_Entries |          1 | EntryText            |            1 | EntryText  
      | NULL      |      176092 |     NULL | NULL   | YES  | FULLTEXT   |       
  |
+---------------+------------+----------------------+--------------+------------------+-----------+-------------+----------+--------+------+------------+---------+
13 rows in set (0.00 sec)

mysql> show index from Stage_EntryIsTypeOfPlace;
+--------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table                    | Non_unique | Key_name    | Seq_in_index | 
Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | 
Comment |
+--------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Stage_EntryIsTypeOfPlace |          0 | PRIMARY     |            1 | ID       
   | A         |      182769 |     NULL | NULL   |      | BTREE      |         |
| Stage_EntryIsTypeOfPlace |          1 | PlaceTypeID |            1 | 
PlaceTypeID | A         |         180 |     NULL | NULL   | YES  | BTREE      | 
        |
+--------------------------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)

mysql> show index from Stage_EntryHasPopulation;
+--------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Table                    | Non_unique | Key_name | Seq_in_index | Column_name 
| Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment |
+--------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
| Stage_EntryHasPopulation |          0 | PRIMARY  |            1 | ID          
| A         |      182302 |     NULL | NULL   |      | BTREE      |         |
| Stage_EntryHasPopulation |          1 | EntryID  |            1 | EntryID     
| A         |      182302 |     NULL | NULL   |      | BTREE      |         |
+--------------------------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+
2 rows in set (0.00 sec)

mysql> SELECT EntryID FROM Stage_EntryIsTypeOfPlace WHERE PlaceTypeID = 21 AND 
EntryID IN ( SELECT ID FROM Stage_Entries WHERE ( MATCH ( SearchName ) AGAINST 
( 'north*' IN BOOLEAN MODE ) ) AND ( ( Stage_Entries.Status = 1 ) OR ( 
Stage_Entries.Status = 2 ) OR ( Stage_Entries.Status = 3 ) OR ( 
Stage_Entries.Status = 5 ) ) ) ;
+---------+
| EntryID |
+---------+
|  112132 |
|  111729 |
|  111748 |
|  111750 |
|  111759 |
|  111762 |
|  111763 |
|  111807 |
|  111827 |
|  111831 |
|  111838 |
|  111857 |
|  111876 |
|  111891 |
|  111923 |
|  111946 |
|  111963 |
|  111964 |
|  111970 |
|  111982 |
|  111985 |
|  111987 |
|  111998 |
|  112000 |
|  112016 |
|  112037 |
|  112038 |
|  112050 |
|  112051 |
|  112052 |
|  112064 |
|  112091 |
|  112107 |
|  112109 |
|  112140 |
|  112152 |
|  112153 |
|  112178 |
|  112221 |
|  112222 |
|  112235 |
|  112237 |
|  112245 |
|  117817 |
+---------+
44 rows in set (0.62 sec)

mysql> SELECT EntryID FROM Stage_EntryHasPopulation WHERE Population > 10000 
AND EntryID IN ( 112132, 111729, 111748, 111750, 111759, 111762, 111763, 
111807, 111827, 111831, 111838, 111857, 111876, 111891, 111923, 111946, 111963, 
111964, 111970, 111982, 111985, 111987, 111998, 112000, 112016, 112037, 112038, 
112050, 112051, 112052, 112064, 112091, 112107, 112109, 112140, 112152, 112153, 
112178, 112221, 112222, 112235, 112237, 112245, 117817 ) ;
+---------+
| EntryID |
+---------+
|  111729 |
|  111729 |
|  111748 |
|  111748 |
|  111750 |
|  111750 |
|  111759 |
|  111762 |
|  111763 |
|  111807 |
|  111807 |
|  111827 |
|  111827 |
|  111831 |
|  111831 |
|  111838 |
|  111838 |
|  111857 |
|  111876 |
|  111876 |
|  111891 |
|  111891 |
|  111923 |
|  111923 |
|  111963 |
|  111963 |
|  111964 |
|  111964 |
|  111970 |
|  111970 |
|  111982 |
|  111982 |
|  111985 |
|  111985 |
|  111987 |
|  111987 |
|  111998 |
|  111998 |
|  112000 |
|  112000 |
|  112016 |
|  112016 |
|  112037 |
|  112037 |
|  112038 |
|  112038 |
|  112050 |
|  112050 |
|  112052 |
|  112064 |
|  112091 |
|  112091 |
|  112107 |
|  112140 |
|  112152 |
|  112153 |
|  112153 |
|  112178 |
|  112221 |
|  112221 |
|  112235 |
|  112235 |
|  112237 |
|  112237 |
|  112245 |
|  112245 |
|  117817 |
+---------+
67 rows in set (0.01 sec)

mysql> SELECT EntryID FROM Stage_EntryHasPopulation WHERE Population > 10000 
AND EntryID IN ( SELECT EntryID FROM Stage_EntryIsTypeOfPlace WHERE PlaceTypeID 
= 21 AND EntryID IN ( SELECT ID FROM Stage_Entries WHERE ( MATCH ( SearchName ) 
AGAINST ( 'north*' IN BOOLEAN MODE ) ) AND ( ( Stage_Entries.Status = 1 ) OR ( 
Stage_Entries.Status = 2 ) OR ( Stage_Entries.Status = 3 ) OR ( 
Stage_Entries.Status = 5 ) ) ) ) ;

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

Reply via email to