优化MySql中的三个LEFT JOIN

时间:2015-07-30 12:05:06

标签: mysql database join left-join

我的问题是使用Left Join进行优化 我有4个表:

1.Main 
2.City
3.Country
4.Area

表格结构:

  1. 主要

    • Origin_City - Dest_City
    • Origin_Country - Dest_Country
    • Orig_Area - Dest_Area
  2. 城市

    • Origin_City - Dest_City
    • Origin_Country - Dest_Country
    • Orig_Area - Dest_Area
    • Value_City
  3. 国家/地区

    • Origin_Country - Dest_Country
    • Orig_Area - Dest_Area
    • Value_Country
  4. 区域

    • Orig_Area - Dest_Area
    • Value_Area
  5. 必须将主表与三个表进行比较才能获得值。

    1. 当主表的 Origin_city Dest_city 与City表的 Origin_city Dest_City 完全匹配时,然后考虑来自City表的 Value_City

    2. 如果主表的 Orig_city Dest_city 与City表不匹配( Value_City 不可用时)。然后将Main表的 Origin_Country Dest_Country 与Country表进行比较,如果匹配,则考虑 Value_Country

    3. 如果 Origin_Country Dest_Country 与Country表不匹配。然后将Main表的 Origin_Area Dest_Area 与Area表进行比较,如果匹配则考虑 Value_Area

    4. 我根据要求编写了一个MySQL查询。问题是City表有近100万行,运行需要很长时间。 我的代码在

      之下
      SELECT main.Origin_City, main.Dest_City,
      main.Origin_Country, main.Dest_Country,
      main.Origin_Area, main.Dest_Area,
      IFNULL(Value_City,IFNULL(Value_Country,Value_Area))
      
      FROM main
      LEFT JOIN City 
      on (main.Origin_City = City.Origin_City) 
         and (main.Dest_City = City.Dest_City)
      
      LEFT JOIN Country 
      ON (main.Origin_Country = Country.Origin_Country) 
         and (main.Dest_Country = Country.Dest_Country)
      
      LEFT JOIN Area 
      ON (main.Origin_Area = Area.Origin_Area) and (main.Dest_Area = Area.Dest_Area)
      
      1. 我还使用where子句和Case语句编写了查询。它还需要很长的时间才能运行。
      2. 我从city表中提取了Country和Area表。特定国家/地区有许多可用值,我从中获取MIN值。
      3. 如何优化查询以获得结果。我最近开始查询MySQL。我在MS Access中做了同样的事情。它完美无缺。

0 个答案:

没有答案