Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何优化MySQL查询_Mysql_Sql_Indexing_Query Optimization - Fatal编程技术网

如何优化MySQL查询

如何优化MySQL查询,mysql,sql,indexing,query-optimization,Mysql,Sql,Indexing,Query Optimization,我有很多疑问,比如下面的疑问。 我是如何得到它们的- SELECT DISTINCT n.nid AS nid, n.title AS title, n.created AS created, n.changed AS changed, n.type AS type, n.status AS status, n.uid AS uid, u.name AS name, fit.field_item_topic_tid AS field_item_topic_tid, fui.fie

我有很多疑问,比如下面的疑问。 我是如何得到它们的-

SELECT DISTINCT
  n.nid AS nid, n.title AS title, n.created AS created, n.changed AS changed,
  n.type AS type, n.status AS status, n.uid AS uid, u.name AS name,
  fit.field_item_topic_tid AS field_item_topic_tid,
  fui.field_upload_item_fid AS field_upload_item_fid,
  fist.field_item_sub_topic_tid AS field_item_sub_topic_tid,
  asid.field_item_asset_id_value AS field_item_asset_id_value,
  fur.field_item_urgent_value AS field_item_urgent_value,
  scrubbing.field_item_scrubbing_value AS field_item_scrubbing_value,
  wsts.field_item_workflow_status_value AS field_item_workflow_status_value,
  wfs.state AS state
FROM 
node n
LEFT OUTER JOIN field_data_field_item_topic fit ON n.nid=fit.entity_id
LEFT OUTER JOIN field_data_field_upload_item fui ON fui.entity_id= n.nid
LEFT OUTER JOIN field_data_field_item_sub_topic fist ON n.nid=fist.entity_id
LEFT OUTER JOIN field_data_field_item_asset_id asid ON n.nid=asid.entity_id
LEFT OUTER JOIN field_data_field_item_urgent fur ON fur.entity_id= n.nid
LEFT OUTER JOIN field_data_field_item_scrubbing scrubbing ON scrubbing.entity_id= n.nid
LEFT OUTER JOIN field_data_field_item_workflow_status wsts ON wsts.entity_id = n.nid
LEFT OUTER JOIN workflow_states wfs ON wfs.sid = wsts.field_item_workflow_status_value
LEFT OUTER JOIN users u ON u.uid = n.uid
WHERE ( (n.type = 'item') )
AND( (wsts.field_item_workflow_status_value IN  ('All', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10')) )
AND(    (fit.field_item_topic_tid IN  ('NULL', '46', '47', '48', '52', '73', '90', '118', '142', '150', '154', '175', '196', '362', '363', '366', '367', '383', '403', '406', '533', '535', '543'))
     OR (fist.field_item_sub_topic_tid IN  ('NULL', '50', '51', '66', '67', '70', '71', '74', '75', '76', '93', '143', '151', '197', '198', '206', '211', '304', '364', '368', '384', '404', '407', '534', '536'))
)
ORDER BY n.changed desc
LIMIT 20 OFFSET 0


您还没有包括表结构(特别是索引),所以我只能提供一半答案。首先,请注意这一行的输出:

1   SIMPLE  wsts    range   entity_id,field_item_workflow_status_value  field_item_workflow_status_value    5   NULL    1708    Using where; Using temporary; Using filesort
这意味着它必须手动查找1708条记录。使用了索引等,但保留了1708个。这些记录将使用已知速度较慢的文件进行排序

质疑

LEFT OUTER JOIN field_data_field_item_workflow_status wsts ON wsts.entity_id = n.nid
根据表格字段\数据\字段\项目\工作流\状态进行选择。我认为如果你能在那里添加索引,你就必须集中精力。如果索引存在,也许可以更好地描述它?如果有索引,字段长度是否可以缩短?数据类型越大,索引越大。因此,尽可能使用TINYINT而不是INT


不管怎么说,你很接近:)

是的,我猜这很简单,因为一些索引被省略了。
LEFT OUTER JOIN field_data_field_item_workflow_status wsts ON wsts.entity_id = n.nid