【问题标题】:Help me optimize this query. Please帮我优化这个查询。请
【发布时间】:2011-04-07 15:17:38
【问题描述】:
$query_index_neighborhood1 = 
"SELECT areas_db.areas_name, areas_db.areas_id, neighborhoods_db.neighborhoods_id,
neighborhoods_db.neighborhoods_name, neighborhoods_db.neighborhoods_area_id, 
areas_db.areas_state_id 
FROM (
       (
         (
            restaurants_db 
            INNER JOIN neighborhoods_db ON neighborhoods_db.neighborhoods_id=restaurants_db.restaurants_neighborhood
         ) 
         INNER JOIN areas_db ON areas_db.areas_id=neighborhoods_db.neighborhoods_area_id
       )
       INNER JOIN areas_db AS areas_db1 on areas_db1.areas_id=restaurants_db.restaurants_area
    )
WHERE areas_db.areas_state_id=$mxstateid
GROUP BY neighborhoods_db.neighborhoods_id
ORDER BY areas_db.areas_id, neighborhoods_db.neighborhoods_name ASC";

【问题讨论】:

  • 可能想要粘贴您的“创建表”语句,以便人们可以看到您已经获得的索引,以及查询的描述。没有所有信息,任何机构都无法为您提供太多帮助
  • 您的表上有哪些索引?
  • 这些括号是怎么回事?
  • 运行该查询并在其前面输入单词 Explain,这样您就可以解释 Select area.... MySQL 将让您清楚地了解您的查询到底发生了什么
  • 您不需要连接子句中的所有这些括号。那种可怕的垃圾是 Microsoft Access 试图强加给世界的东西。

标签: mysql query-optimization


【解决方案1】:

作为一个有趣的思考练习,我想出了以下内容:

SELECT a.areas_name,
    a.areas_id,
    n.neighborhoods_id,
    n.neighborhoods_name,
    n.neighborhoods_area_id, 
    a.areas_state_id 
FROM neighborhoods_db AS n
INNER JOIN areas_db AS a ON a.areas_id = n.neighborhoods_area_id
WHERE a.areas_state_id = $mxstateid
    AND n.neighborhoods_id in (SELECT restaurants_neighborhood FROM restaurants_db)
ORDER BY a.areas_id, n.neighborhoods_name ASC

另外,表别名也是你的朋友。

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多