1

私はこのMySQLを持っていますが、これは正しい構文でなければなりません:

select c.cat_id,c.cat_name as cat_name, 
 c.cat_desc, c.cat_image, mi.filename, 
 l.link_id, l.user_id, l.address,l.city, 
 l.country,l.link_created,l.link_desc, 
 l.email,l.fax,l.link_hits, l.link_modified,
 l.link_name,l.postcode, l.price,l.link_rating, 
 l.state,l.telephone,l.link_votes,
 l.website, l.link_id, l.link_visited, cf.value
from j25_mt_cats as c,
j25_mt_links as l 
LEFT OUTER JOIN j25_mt_cfvalues AS cf ON (cf.link_id = l.link_id),
j25_mt_images AS mi,
j25_mt_cl as cl
UNION ALL
select c.cat_id,c.cat_name as cat_name, 
 c.cat_desc, c.cat_image, mi.filename, 
 l.link_id, l.user_id, l.address,l.city, 
 l.country,l.link_created,l.link_desc, 
 l.email,l.fax,l.link_hits, l.link_modified,
 l.link_name,l.postcode, l.price,l.link_rating, 
 l.state,l.telephone,l.link_votes,
 l.website, l.link_id, l.link_visited, cf.value
FROM j25_mt_cats as c,
j25_mt_links as l
RIGHT OUTER JOIN j25_mt_cfvalues AS cf ON cf.link_id = l.link_id,
j25_mt_images AS mi,
j25_mt_cl as cl
where cf.cf_id = 40 and cl.link_id = l.link_id 
 AND mi.link_id = l.link_id AND mi.ordering < 2  
 AND c.cat_id = cl.cat_id and c.cat_published = 1 
 AND c.cat_approved = 1 and l.link_published = 1 and l.link_approved = 1
 AND cf.link_id IS NULL;

クエリは tmp ディレクトリで 3GB 以上を消費し、タイムアウトになります。ここに何かが欠けています。どうすれば効率を上げることができますか? ここでの私の目標は、既存のクエリに追加して、追加のテーブル (j25_mt_cfvalues) から値を取得することでした。

explain:

+----+--------------+------------+-------+---------------+---------+---------+--------------------------+------+------------------+
| id | select_type  | table      | type  | possible_keys | key     | key_len | ref                      | rows | Extra            |
+----+--------------+------------+-------+---------------+---------+---------+--------------------------+------+------------------+
|  1 | PRIMARY      | mi         | ALL   | NULL          | NULL    | NULL    | NULL                     |  165 |                  |
|  1 | PRIMARY      | c          | ALL   | NULL          | NULL    | NULL    | NULL                     |  301 |                  |
|  1 | PRIMARY      | l          | ALL   | NULL          | NULL    | NULL    | NULL                     | 2139 |                  |
|  1 | PRIMARY      | cf         | ref   | link_id       | link_id | 4       | db_table.l.link_id |    2 |                  |
|  1 | PRIMARY      | cl         | index | NULL          | PRIMARY | 4       | NULL                     | 2742 | Using index      |
|  2 | UNION        | NULL       | NULL  | NULL          | NULL    | NULL    | NULL                     | NULL | Impossible WHERE |
| NULL | UNION RESULT | <union1,2> | ALL   | NULL          | NULL    | NULL    | NULL                     | NULL |                  |
+----+--------------+------------+-------+---------------+---------+---------+--------------------------+------+------------------+

j25_mt_cats スキーマ:

CREATE TABLE j25_mt_cats( cat_idint(11) NOT NULL auto_increment, cat_namevarchar(255) NOT NULL, aliasvarchar(255) NOT NULL, titlevarchar(255) NOT NULL, cat_desctext NOT NULL, cat_parentint(11) NOT NULL デフォルト '0', cat_linksint(11 ) NOT NULL デフォルト '0', cat_catsint(11) NOT NULL デフォルト '0', cat_featuredtinyint(4) NOT NULL デフォルト '0', cat_imagevarchar(255) NOT NULL, cat_publishedtinyint(4) NOT NULL デフォルト '0', cat_createddatetime NOT NULL デフォルト '0000-00-00 00:00:00'、 cat_approvedtinyint(4) NOT NULL デフォルト '0'、 cat_templatevarchar(255) NOT NULL デフォルト ''、 cat_usemainindextinyint(4) NOT NULL デフォルト '0'、 cat_allow_submissiontinyint(4 ) ) NOT NULL デフォルト '1', cat_show_listingstinyint(3) unsigned NOT NULL デフォルト '1'、 metakeyテキスト NOT NULL、 metadescテキスト NOT NULL、 orderingint(11) NOT NULL デフォルト '0'、 lftint(11) NOT NULL デフォルト '0'、 rgtint(11) NOT NULL デフォルト ' 0', PRIMARY KEY ( cat_id), KEY cat_id( cat_id, cat_published, cat_approved), KEY cat_parent( cat_parent, cat_published, cat_approved, ), KEY ( cat_cats, ), KEY ( , ), KEY ( , , ) , KEY ( ) ENGINE=MyISAM AUTO_INCREMENT=3851 DEFAULT CHARSET=utf8 |cat_linksdtreecat_publishedcat_approvedlft_rgtlftrgtfunc_getPathWaylftrgtcat_idcat_parentaliasalias

j25_mt_links スキーマ:

CREATE TABLE j25_mt_links( link_idint(11) NOT NULL auto_increment, link_namevarchar(255) NOT NULL, aliasvarchar(255) NOT NULL, link_descmediumtext NOT NULL, user_idint(11) NOT NULL デフォルト '0', link_hitsint(11) NOT NULL デフォルト '0' , link_votesint(11) NOT NULL デフォルト '0', link_ratingdecimal(7,6) unsigned NOT NULL デフォルト '0.000000', link_featuredsmallint(6) NOT NULL デフォルト '0', link_publishedtinyint(4) NOT NULL デフォルト '0', link_approvedint( 4) NOT NULL デフォルト '0'、 link_templatevarchar(255) NOT NULL、 attribsテキスト NOT NULL、 metakeyテキスト NOT NULL、 metadescテキスト NOT NULL、 internal_notesテキスト NOT NULL、 orderingint(11) NOT NULL デフォルト '0'、 link_createddatetime NOT NULL デフォルト '0000-00-00 00:00:00'、 publish_updatetime NOT NULL デフォルト '0000-00-00 00:00:00'、 publish_downdatetime NOT NULL デフォルト '0000-00-00 00:00:00' 、 link_modifieddatetime NOT NULL デフォルト '0000-00-00 00:00:00'、 link_visitedint(11) NOT NULL デフォルト '0'、 addressvarchar(255) NOT NULL、 cityvarchar(255) NOT NULL、 statevarchar(255) NOT NULL、 countryvarchar(255) NOT NULL, postcodevarchar(255) NOT NULL, telephonevarchar(255) NOT NULL, faxvarchar(255) NOT NULL, emailvarchar(255) NOT NULL, websitevarchar(255) NOT NULL, pricedouble(9,2) NOT NULLデフォルト '0.00', latfloat(10,6) NOT NULL コメント 'Latitude', lngfloat(10, 6) NOT NULL コメント「経度」、zoomtinyint(3) unsigned NOT NULL COMMENT 'Map''s zoom level', PRIMARY KEY ( link_id), KEY link_rating( link_rating), KEY link_votes( link_votes), KEY link_name( link_name), KEY publishing( link_published, link_approved, ) , KEY ( , , , publish_up, ) , KEY ( , , , , ), KEY ( , ), FULLTEXT KEY ( , ) ) ENGINE=MyISAM AUTO_INCREMENT=3229 DEFAULT CHARSET=utf8 |publish_downcount_listfeaturedlink_publishedlink_approvedlink_featuredpublish_uppublish_downlink_idcount_viewownerlink_publishedlink_approveduser_idpublish_uppublish_downmylistinguser_idlink_idlink_name_desclink_namelink_desc

j25_mt_cfvalues スキーマ:

CREATE TABLE j25_mt_cfvalues( idint(11) NOT NULL auto_increment, cf_idint(11) NOT NULL, link_idint(11) NOT NULL, valuemediumtext NOT NULL, attachmentint(10) unsigned NOT NULL デフォルト '0', counterint(11) NOT NULL デフォルト '0 ', PRIMARY KEY ( id), KEY cf_id( cf_id, link_id), KEY link_id( link_id), KEY value( value(8)) ) ENGINE=MyISAM AUTO_INCREMENT=20876 DEFAULT CHARSET=utf8 |

4

1 に答える 1