慢查询LEFT OUTER JOIN Mysql

时间:2011-10-10 23:22:13

标签: mysql join outer-join

谢谢你能帮帮我吗,我正在迁移一个应用程序并转到mysql 5.5非常慢的查询返回非常感谢你的帮助。

SELECT DISTINCT b.cc46_cc55_field_id_id AS row_id, t0.cc46_value AS f_264, t1.cc46_value AS f_265, t2.cc46_value AS f_266
FROM tc46_fields_values b 
LEFT OUTER JOIN tc46_fields_values t0 ON b.cc46_cc55_field_id_id = t0.cc46_cc55_field_id_id 
  AND t0.cc46_cc26_field_id = 264 
LEFT OUTER JOIN tc46_fields_values t1 ON b.cc46_cc55_field_id_id = t1.cc46_cc55_field_id_id 
  AND t1.cc46_cc26_field_id = 265 
LEFT OUTER JOIN tc46_fields_values t2 ON b.cc46_cc55_field_id_id = t2.cc46_cc55_field_id_id 
  AND t2.cc46_cc26_field_id = 266
WHERE b.cc46_cc55_field_id_id IN (5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166)

3 个答案:

答案 0 :(得分:5)

确保您在字段“cc46_cc55_field_id_id”上有索引。此外,不要使用近200个ID的列表...由于您的版本都是顺序的,只需使用BETWEEN子句..

SELECT DISTINCT 
      b.cc46_cc55_field_id_id AS row_id, 
      t0.cc46_value AS f_264, 
      t1.cc46_value AS f_265, 
      t2.cc46_value AS f_266 
   FROM 
      tc46_fields_values b 
         LEFT JOIN tc46_fields_values t0 
            ON b.cc46_cc55_field_id_id = t0.cc46_cc55_field_id_id 
           AND t0.cc46_cc26_field_id = 264 
         LEFT JOIN tc46_fields_values t1 
            ON b.cc46_cc55_field_id_id = t1.cc46_cc55_field_id_id 
           AND t1.cc46_cc26_field_id = 265 
         LEFT OUTER JOIN tc46_fields_values t2 
            ON b.cc46_cc55_field_id_id = t2.cc46_cc55_field_id_id 
           AND t2.cc46_cc26_field_id = 266 
   WHERE 
      b.cc46_cc55_field_id_id  between 5924 and 6166

答案 1 :(得分:0)

要查看使用了哪些索引,请运行

EXPLAIN SELECT DISTINCT 
      b.cc46_cc55_field_id_id AS row_id, 
      t0.cc46_value AS f_264, 
      t1.cc46_value AS f_265, 
      t2.cc46_value AS f_266 
   FROM 
      tc46_fields_values b 
         LEFT JOIN tc46_fields_values t0 
            ON b.cc46_cc55_field_id_id = t0.cc46_cc55_field_id_id 
           AND t0.cc46_cc26_field_id = 264 
         LEFT JOIN tc46_fields_values t1 
            ON b.cc46_cc55_field_id_id = t1.cc46_cc55_field_id_id 
           AND t1.cc46_cc26_field_id = 265 
         LEFT OUTER JOIN tc46_fields_values t2 
            ON b.cc46_cc55_field_id_id = t2.cc46_cc55_field_id_id 
           AND t2.cc46_cc26_field_id = 266 
   WHERE 
      b.cc46_cc55_field_id_id  between 5924 and 6166

答案 2 :(得分:0)

请尝试使用此查询:

SELECT b.cc46_cc55_field_id_id AS row_id, t0.cc46_value AS f_264, t1.cc46_value AS f_265, t2.cc46_value AS f_266 
FROM 
tc46_fields_values b LEFT OUTER JOIN tc46_fields_values t0 ON b.cc46_cc55_field_id_id = t0.cc46_cc55_field_id_id 
LEFT OUTER JOIN tc46_fields_values t1 ON b.cc46_cc55_field_id_id = t1.cc46_cc55_field_id_id 
LEFT OUTER JOIN tc46_fields_values t2 ON b.cc46_cc55_field_id_id = t2.cc46_cc55_field_id_id 
WHERE
t0.cc46_cc26_field_id = 264
AND
t1.cc46_cc26_field_id = 265
AND
t2.cc46_cc26_field_id = 266
AND
b.cc46_cc55_field_id_id IN (5924,5925,5926,5927,5928,5929,5930,5931,5932,5933,5934,5935,5936,5937,5938,5939,5940,5941,5942,5943,5944,5945,5946,5947,5948,5949,5950,5951,5952,5953,5954,5955,5956,5957,5958,5959,5960,5961,5962,5963,5964,5965,5966,5967,5968,5969,5970,5971,5972,5973,5974,5975,5976,5977,5978,5979,5980,5981,5982,5983,5984,5985,5986,5987,5988,5989,5990,5991,5992,5993,5994,5995,5996,5997,5998,5999,6000,6001,6002,6003,6004,6005,6006,6007,6008,6009,6010,6011,6012,6013,6014,6015,6016,6017,6018,6019,6020,6021,6022,6023,6024,6025,6026,6027,6028,6029,6030,6031,6032,6033,6034,6035,6036,6037,6038,6039,6040,6041,6042,6043,6044,6045,6046,6047,6048,6049,6050,6051,6052,6053,6054,6055,6056,6057,6058,6059,6060,6061,6062,6063,6064,6065,6066,6067,6068,6069,6070,6071,6072,6073,6074,6075,6076,6077,6078,6079,6080,6081,6082,6083,6084,6085,6086,6087,6088,6089,6090,6091,6092,6093,6094,6095,6096,6097,6098,6099,6100,6101,6102,6103,6104,6105,6106,6107,6108,6109,6110,6111,6112,6113,6114,6115,6116,6117,6118,6119,6120,6121,6122,6123,6124,6125,6126,6127,6128,6129,6130,6131,6132,6133,6134,6135,6136,6137,6138,6139,6140,6141,6142,6143,6144,6145,6146,6147,6148,6149,6150,6151,6152,6153,6154,6155,6156,6157,6158,6159,6160,6161,6162,6163,6164,6165,6166)
GROUP BY
b.cc46_cc55_field_id_id

而不是使用不同的使用组。