MySQL-一个产品表,只有1.5W的数据,排序的时候很慢,排序的字段加了索引,不知道什么原因

MySQL-一个产品表,只有1.5W的数据,排序的时候很慢,排序的字段加了索引,不知道什么原因

归属感 发布于 2017-01-23 字数 5080 浏览 983 回复 2

MYSQL数据库:我有一个产品表,数据量达到1.5W就很慢了,而且我用EXPLAN 查看需要扫描8000多行,不知道什么原因

数据结构如下:

CREATE TABLE `products` (
`productid` int(11) NOT NULL auto_increment,
`url_rewrite` varchar(255) NOT NULL,
`prodname` varchar(250) NOT NULL default '',
`prodtype` smallint(6) NOT NULL default '0',
`prodcode` varchar(250) NOT NULL default '',
`prodfile` varchar(250) NOT NULL default '',
`proddesc` longtext,
`prodsearchkeywords` varchar(250) NOT NULL default '',
`prodavailability` varchar(250) NOT NULL default '',
`prodprice` decimal(20,4) NOT NULL default '0.0000',
`prodcostprice` decimal(20,4) NOT NULL default '0.0000',
`prodretailprice` decimal(20,4) NOT NULL default '0.0000',
`prodsaleprice` decimal(20,4) NOT NULL default '0.0000',
`prodcalculatedprice` decimal(20,4) NOT NULL default '0.0000',
`prodsortorder` int(11) NOT NULL default '0',
`prodvisible` tinyint(4) NOT NULL default '0',
`prodfeatured` tinyint(4) NOT NULL default '0',
`prodvendorfeatured` tinyint(1) NOT NULL default '0',
`prodrelatedproducts` varchar(250) NOT NULL default '',
`prodcurrentinv` int(11) NOT NULL default '0',
`prodlowinv` int(11) NOT NULL default '0',
`prodoptionsrequired` tinyint(4) NOT NULL default '0',
`prodwarranty` text,
`prodweight` decimal(20,4) NOT NULL default '0.0000',
`prodwidth` decimal(20,4) NOT NULL default '0.0000',
`prodheight` decimal(20,4) NOT NULL default '0.0000',
`proddepth` decimal(20,4) NOT NULL default '0.0000',
`prodfixedshippingcost` decimal(20,4) NOT NULL default '0.0000',
`prodfreeshipping` tinyint(4) NOT NULL default '0',
`prodinvtrack` tinyint(4) NOT NULL default '0',
`prodratingtotal` int(11) NOT NULL default '0',
`prodnumratings` int(11) NOT NULL default '0',
`prodnumsold` int(11) NOT NULL default '0',
`proddateadded` int(11) NOT NULL default '0',
`prodbrandid` int(11) NOT NULL default '0',
`prodnumviews` int(11) NOT NULL default '0',
`prodpagetitle` varchar(250) NOT NULL default '',
`prodmetakeywords` text,
`prodmetadesc` text,
`prodlayoutfile` varchar(50) NOT NULL default '',
`prodvariationid` int(11) NOT NULL default '0',
`prodallowpurchases` int(1) NOT NULL default '1',
`prodhideprice` int(1) NOT NULL default '0',
`prodcallforpricinglabel` varchar(200) NOT NULL default '',
`prodcatids` text NOT NULL,
`prodlastmodified` int(10) unsigned NOT NULL default '0',
`prodvendorid` int(10) unsigned NOT NULL default '0',
`prodhastags` int(1) NOT NULL default '0',
`prodwrapoptions` text,
`prodconfigfields` varchar(255) NOT NULL default '',
`prodeventdaterequired` tinyint(4) default NULL,
`prodeventdatefieldname` varchar(255) default NULL,
`prodeventdatelimited` tinyint(4) default NULL,
`prodeventdatelimitedtype` tinyint(4) default NULL,
`prodeventdatelimitedstartdate` int(9) default NULL,
`prodeventdatelimitedenddate` int(9) default NULL,
`prodmyobasset` varchar(20) NOT NULL default '',
`prodmyobincome` varchar(20) NOT NULL default '',
`prodmyobexpense` varchar(20) NOT NULL default '',
`prodpeachtreegl` varchar(20) NOT NULL default '',
`prodcondition` enum('New','Used','Refurbished') NOT NULL default 'New',
`prodshowcondition` tinyint(1) unsigned NOT NULL default '0',
`product_enable_optimizer` tinyint(1) unsigned NOT NULL default '0',
`prodpreorder` tinyint(1) unsigned NOT NULL default '0',
`prodreleasedate` int(11) NOT NULL default '0',
`prodreleasedateremove` tinyint(1) unsigned NOT NULL default '0',
`prodpreordermessage` varchar(250) NOT NULL default '',
`prodminqty` int(10) unsigned NOT NULL default '0',
`prodmaxqty` int(10) unsigned NOT NULL default '0',
`tax_class_id` int(10) unsigned NOT NULL default '0',
`opengraph_type` varchar(15) NOT NULL default 'product',
`opengraph_title` varchar(250) NOT NULL default '',
`opengraph_use_product_name` tinyint(1) unsigned NOT NULL default '1',
`opengraph_description` text,
`opengraph_use_meta_description` tinyint(1) unsigned NOT NULL default '1',
`opengraph_use_image` tinyint(1) unsigned NOT NULL default '1',
`upc` varchar(32) default '',
`disable_google_checkout` int(1) NOT NULL default '0',
PRIMARY KEY (`productid`),
KEY `i_products_brand_vis` (`prodbrandid`,`prodvisible`),
KEY `i_products_prodnumsold` (`prodnumsold`),
KEY `i_products_feature_vis` (`prodfeatured`,`prodvisible`),
KEY `i_products_rating_vis` (`prodvisible`,`prodratingtotal`),
KEY `i_products_added_vis` (`prodvisible`,`proddateadded`),
KEY `i_products_hideprice_vis` (`prodhideprice`,`prodvisible`),
KEY `i_products_sortorder_vis` (`prodvisible`,`prodsortorder`,`prodname`),
KEY `url_rewrite` (`url_rewrite`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=15070 ;

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

夜无邪 2017-03-30 2 楼

提取的字段太多将有很大影响
另外看那个extra,扫描了9000多行,而且使用了filesort,temp,这里将会很慢

想挽留 2017-02-23 1 楼

慢的原因有很多种可能,你这个索引建的有点过多了,一般一个表不超过三个索,你这个表建了九个索引,而且很多都是组件索引,这样不仅增加了索引的体积,所以查询起来并不快,还有一个可能是你的表体积过大了。还你说用Explain需要扫描很多行,你把explain的SQL语句也贴出来看看才能知道具体的原因,很可能是并没有用到索引。