Advertisement
anchormodeling

MySQL Table Elimination

Mar 27th, 2011
582
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 6.41 KB | None | 0 0
  1. -- Test run on MySQL 6.0.10 Alpha (2009-04-23)
  2.  
  3. DROP TABLE IF EXISTS AN_Anchor;
  4.  
  5. CREATE TABLE AN_Anchor (
  6.     AN_ID INT NOT NULL,
  7.     PRIMARY KEY(AN_ID)
  8. );
  9.  
  10. DROP TABLE IF EXISTS ANAT1_AnchorAttribute1;
  11.  
  12. CREATE TABLE ANAT1_AnchorAttribute1 (
  13.     AN_ID INT NOT NULL,
  14.     ANAT1_AnchorAttribute1Value CHAR(10) NOT NULL,
  15.     PRIMARY KEY(AN_ID)
  16. );
  17.  
  18. DROP TABLE IF EXISTS ANAT2_AnchorAttribute2;
  19.  
  20. CREATE TABLE ANAT2_AnchorAttribute2 (
  21.     AN_ID INT NOT NULL,
  22.     ANAT2_AnchorAttribute2Value CHAR(10) NOT NULL,
  23.     ANAT2_FromDate DATE NOT NULL,
  24.     PRIMARY KEY(AN_ID, ANAT2_FromDate)
  25. );
  26.  
  27. DROP VIEW IF EXISTS lAN_Anchor;
  28.  
  29. CREATE VIEW lAN_Anchor
  30. AS
  31. SELECT
  32.     AN.AN_ID,
  33.     ANAT1.ANAT1_AnchorAttribute1Value,
  34.     ANAT2.ANAT2_AnchorAttribute2Value,
  35.     ANAT2.ANAT2_FromDate
  36. FROM
  37.     AN_Anchor AN
  38. LEFT JOIN
  39.     ANAT1_AnchorAttribute1 ANAT1
  40. ON
  41.     ANAT1.AN_ID = AN.AN_ID
  42. LEFT JOIN
  43.     ANAT2_AnchorAttribute2 ANAT2
  44. ON
  45.     ANAT2.AN_ID = AN.AN_ID
  46. AND
  47.     ANAT2.ANAT2_FromDate = (
  48.         SELECT
  49.             MAX(sub.ANAT2_FromDate)
  50.         FROM
  51.             ANAT2_AnchorAttribute2 sub
  52.         WHERE
  53.             sub.AN_ID = AN.AN_ID
  54.     );
  55.  
  56. INSERT INTO AN_Anchor (
  57.     AN_ID
  58. )
  59. VALUES
  60. (1),
  61. (2),
  62. (3);
  63.  
  64. ANALYZE TABLE AN_Anchor;
  65.  
  66. INSERT INTO ANAT1_AnchorAttribute1 (
  67.     AN_ID,
  68.     ANAT1_AnchorAttribute1Value
  69. )
  70. VALUES
  71. (1, 'Green'),
  72. (2, 'Blue'),
  73. (3, 'Red');
  74.  
  75. ANALYZE TABLE ANAT1_AnchorAttribute1;
  76.  
  77. INSERT INTO ANAT2_AnchorAttribute2 (
  78.     AN_ID,
  79.     ANAT2_AnchorAttribute2Value,
  80.     ANAT2_FromDate
  81. )
  82. VALUES
  83. (1, 'Car', '2008-01-01'),
  84. (1, 'Bus', '2008-12-12'),
  85. (2, 'Train', '2008-01-01'),
  86. (2, 'Car', '2008-12-12'),
  87. (3, 'Train', '2008-01-01'),
  88. (3, 'Bus', '2008-12-12');
  89.  
  90. ANALYZE TABLE ANAT2_AnchorAttribute2;
  91.  
  92. SELECT * FROM lAN_Anchor;
  93.  
  94. /*
  95. +-------+-----------------------------+-----------------------------+----------------+
  96. | AN_ID | ANAT1_AnchorAttribute1Value | ANAT2_AnchorAttribute2Value | ANAT2_FromDate |
  97. +-------+-----------------------------+-----------------------------+----------------+
  98. |     1 | Green                       | Bus                         | 2008-12-12     |
  99. |     2 | Blue                        | Car                         | 2008-12-12     |
  100. |     3 | Red                         | Bus                         | 2008-12-12     |
  101. +-------+-----------------------------+-----------------------------+----------------+
  102. */
  103.  
  104. EXPLAIN extended SELECT * FROM lAN_Anchor;
  105. SHOW warnings;
  106.  
  107. /*
  108. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+-------------+
  109. | id | select_type        | table | type   | possible_keys | key     | key_len | ref                | rows | filtered | Extra       |
  110. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+-------------+
  111. |  1 | PRIMARY            | an    | index  | NULL          | PRIMARY | 4       | NULL               |    3 |   100.00 | Using index |
  112. |  1 | PRIMARY            | anat1 | eq_ref | PRIMARY       | PRIMARY | 4       | test.an.AN_ID      |    1 |   100.00 |             |
  113. |  1 | PRIMARY            | anat2 | eq_ref | PRIMARY       | PRIMARY | 7       | test.an.AN_ID,func |    1 |   100.00 | Using where |
  114. |  3 | DEPENDENT SUBQUERY | sub   | ref    | PRIMARY       | PRIMARY | 4       | test.an.AN_ID      |    1 |   100.00 | Using index |
  115. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+-------------+
  116. */
  117.  
  118. SELECT ANAT1_AnchorAttribute1Value FROM lAN_Anchor;
  119.  
  120. /*
  121. +-----------------------------+
  122. | ANAT1_AnchorAttribute1Value |
  123. +-----------------------------+
  124. | Green                       |
  125. | Blue                        |
  126. | Red                         |
  127. +-----------------------------+
  128. */
  129.  
  130. EXPLAIN extended SELECT ANAT1_AnchorAttribute1Value FROM lAN_Anchor;
  131. SHOW warnings;
  132.  
  133. /* No table elimination present
  134. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+--------------------------+
  135. | id | select_type        | table | type   | possible_keys | key     | key_len | ref                | rows | filtered | Extra                    |
  136. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+--------------------------+
  137. |  1 | PRIMARY            | an    | index  | NULL          | PRIMARY | 4       | NULL               |    3 |   100.00 | Using index              |
  138. |  1 | PRIMARY            | anat1 | eq_ref | PRIMARY       | PRIMARY | 4       | test.an.AN_ID      |    1 |   100.00 |                          |
  139. |  1 | PRIMARY            | anat2 | eq_ref | PRIMARY       | PRIMARY | 7       | test.an.AN_ID,func |    1 |   100.00 | Using where; Using index |
  140. |  3 | DEPENDENT SUBQUERY | sub   | ref    | PRIMARY       | PRIMARY | 4       | test.an.AN_ID      |    1 |   100.00 | Using index              |
  141. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+--------------------------+
  142. */
  143.  
  144. SELECT ANAT2_AnchorAttribute2Value FROM lAN_Anchor;
  145.  
  146. /*
  147. +-----------------------------+
  148. | ANAT2_AnchorAttribute2Value |
  149. +-----------------------------+
  150. | Bus                         |
  151. | Car                         |
  152. | Bus                         |
  153. +-----------------------------+
  154. */
  155.  
  156. EXPLAIN extended SELECT ANAT2_AnchorAttribute2Value FROM lAN_Anchor;
  157. SHOW warnings;
  158.  
  159. /* No table elimination present
  160. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+-------------+
  161. | id | select_type        | table | type   | possible_keys | key     | key_len | ref                | rows | filtered | Extra       |
  162. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+-------------+
  163. |  1 | PRIMARY            | an    | index  | NULL          | PRIMARY | 4       | NULL               |    3 |   100.00 | Using index |
  164. |  1 | PRIMARY            | anat1 | eq_ref | PRIMARY       | PRIMARY | 4       | test.an.AN_ID      |    1 |   100.00 | Using index |
  165. |  1 | PRIMARY            | anat2 | eq_ref | PRIMARY       | PRIMARY | 7       | test.an.AN_ID,func |    1 |   100.00 | Using where |
  166. |  3 | DEPENDENT SUBQUERY | sub   | ref    | PRIMARY       | PRIMARY | 4       | test.an.AN_ID      |    1 |   100.00 | Using index |
  167. +----+--------------------+-------+--------+---------------+---------+---------+--------------------+------+----------+-------------+
  168. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement