DBA专家门诊一期:索引与sql优化
                                                    回47楼yuantel的帖子
对第一个语句,我尝试去掉Left Join,仍然还有此问题,所以比较困惑
mysql> explain SELECT b.brand_id, b.brand_name, COUNT(*) AS goods_num FROM `hcsyw`.`ecs_brand`AS b, `hcsyw`.`ecs_goods` AS g   WHERE g.brand_id = b.brand_id AND g.cat_id='1671'  AND b.is_show = 1  AND g.is_on_sale = 1 AND g.is_alone_sale = 1 AND g.is_delete = 0 GROUP BY b.brand_id HAVING goods_num > 0 ORDER BY b.sort_order, b.brand_id ASC;
+----+-------------+-------+--------+-------------------------------------------------------+---------+---------+------------------+------+----------------------------------------------+
| id | select_type | table | type   | possible_keys                                         | key     | key_len | ref              | rows | Extra                                        |
+----+-------------+-------+--------+-------------------------------------------------------+---------+---------+------------------+------+----------------------------------------------+
|  1 | SIMPLE      | g     | ref    | cat_id,brand_id,idx_catid_isdel_ison,idx_sal_sort_gid | cat_id  | 2       | const            | 1826 | Using where; Using temporary; Using filesort |
|  1 | SIMPLE      | b     | eq_ref | PRIMARY,is_show                                       | PRIMARY | 2       | hcsyw.g.brand_id |    1 | Using where                                  |
+----+-------------+-------+--------+-------------------------------------------------------+---------+---------+------------------+------+----------------------------------------------+
2 rows in set (0.00 sec)
-------------------------
 回49楼玄惭的帖子
mysql> show create table ecs_brand;
| Table     | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| ecs_brand | CREATE TABLE `ecs_brand` (
  `brand_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `brand_name` varchar(60) NOT NULL DEFAULT '',
  `brand_logo` varchar(80) NOT NULL DEFAULT '',
  `brand_desc` text NOT NULL,
  `site_url` varchar(255) NOT NULL DEFAULT '',
  `sort_order` tinyint(3) unsigned NOT NULL DEFAULT '50',
  `is_show` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `brand_name1` varchar(60) DEFAULT NULL,
  `lang_flag` int(2) DEFAULT '0',
  PRIMARY KEY (`brand_id`),
  KEY `is_show` (`is_show`),
  KEY `idx_sort` (`sort_order`)
) ENGINE=MyISAM AUTO_INCREMENT=52167 DEFAULT CHARSET=utf8 |
mysql> show create table ecs_goods;
| Table     | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ecs_goods | CREATE TABLE `ecs_goods` (
  `goods_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `cat_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `goods_sn` varchar(60) NOT NULL DEFAULT '',
  `goods_name` varchar(120) NOT NULL DEFAULT '',
  `goods_name_style` varchar(60) NOT NULL DEFAULT '+',
  `click_count` int(10) unsigned NOT NULL DEFAULT '0',
  `brand_id` smallint(5) unsigned NOT NULL DEFAULT '0',
  `provider_name` varchar(100) NOT NULL DEFAULT '',
  `goods_number` smallint(5) unsigned NOT NULL DEFAULT '0',
  `goods_weight` decimal(10,3) unsigned NOT NULL DEFAULT '1.000',
  `market_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
  `shop_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
  `promote_price` decimal(10,2) unsigned NOT NULL DEFAULT '0.00',
  `promote_start_date` int(11) unsigned NOT NULL DEFAULT '0',
  `promote_end_date` int(11) unsigned NOT NULL DEFAULT '0',
  `warn_number` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `keywords` varchar(255) NOT NULL DEFAULT '',
  `goods_brief` varchar(255) NOT NULL DEFAULT '',
  `goods_desc` text NOT NULL,
  `goods_thumb` varchar(255) NOT NULL DEFAULT '',
  `goods_img` varchar(255) NOT NULL DEFAULT '',
  `original_img` varchar(255) NOT NULL DEFAULT '',
  `is_real` tinyint(3) unsigned NOT NULL DEFAULT '1',
  `extension_code` varchar(30) NOT NULL DEFAULT '',
  `is_on_sale` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `is_alone_sale` tinyint(1) unsigned NOT NULL DEFAULT '1',
  `is_shipping` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `integral` int(10) unsigned NOT NULL DEFAULT '0',
  `add_time` int(10) unsigned NOT NULL DEFAULT '0',
  `sort_order` smallint(4) unsigned NOT NULL DEFAULT '100',
  `is_delete` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `is_best` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `is_new` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `is_hot` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `is_promote` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `bonus_type_id` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `last_update` int(10) unsigned NOT NULL DEFAULT '0',
  `goods_type` smallint(5) unsigned NOT NULL DEFAULT '0',
  `seller_note` varchar(255) NOT NULL DEFAULT '',
  `give_integral` int(11) NOT NULL DEFAULT '-1',
  `rank_integral` int(11) NOT NULL DEFAULT '-1',
  `suppliers_id` smallint(5) unsigned DEFAULT NULL,
  `is_check` tinyint(1) unsigned DEFAULT NULL,
  `num_iid` bigint(11) NOT NULL DEFAULT '0',
  `nick` varchar(100) DEFAULT NULL,
  `click_url` text,
  `shop_title` varchar(180) DEFAULT NULL,
  `shop_click_url` varchar(255) DEFAULT NULL,
  `item_location` varchar(60) DEFAULT NULL,
  `volume` int(11) DEFAULT NULL,
  `commission_rate` decimal(10,2) DEFAULT NULL,
  `commission` decimal(10,2) DEFAULT NULL,
  `commission_num` int(11) DEFAULT NULL,
  `commission_volume` decimal(10,2) DEFAULT NULL,
  `post_fee` decimal(10,2) DEFAULT NULL,
  `express_fee` decimal(10,2) DEFAULT NULL,
  `ems_fee` decimal(10,2) DEFAULT NULL,
  `seller_credit_score` varchar(120) DEFAULT NULL,
  `is_tbao` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `procotent` varchar(40) DEFAULT NULL,
  `lang_flag` int(2) DEFAULT '0',
  PRIMARY KEY (`goods_id`),
  KEY `goods_sn` (`goods_sn`),
  KEY `cat_id` (`cat_id`),
  KEY `last_update` (`last_update`),
  KEY `brand_id` (`brand_id`),
  KEY `goods_weight` (`goods_weight`),
  KEY `promote_end_date` (`promote_end_date`),
  KEY `promote_start_date` (`promote_start_date`),
  KEY `goods_number` (`goods_number`),
  KEY `sort_order` (`sort_order`),
  KEY `idx_catid_isdel_ison` (`cat_id`,`is_delete`,`is_on_sale`),
  KEY `idx_gid_bid_cid_onsal_isdel_gnum` (`goods_id`,`brand_id`,`cat_id`,`is_delete`,`is_on_sale`,`goods_name`),
  KEY `idx_sal_sort_gid` (`is_on_sale`,`sort_order`,`goods_id`),
  KEY `idx_gid_sort` (`goods_id`,`sort_order`),
  KEY `idx_sort_gid` (`sort_order`,`goods_id`)
) ENGINE=MyISAM AUTO_INCREMENT=1029092 DEFAULT CHARSET=utf8
                                                    
                                                        赞0
                                                        踩0