2010-07-22 80 views
1

我使用在同一台服务器上运行的python脚本检索数据库中存储为blob的图像。慢速查询,我可以加快速度吗?

SELECT * 
    FROM imagedb_production.imagedb IMAGE 
LEFT JOIN dccms_production.tblmedia MEDIA ON IMAGE.name = MEDIA.name 
LEFT JOIN dccms_production.tblmultimedia CAP ON MEDIA.contentItemID = CAP.contentItemID 
    LIMIT 5000,100; 

的EXPLAIN返回

id select_type table type possible_keys    key   key_len  ref          rows Extra 
1 SIMPLE  IMAGE index NULL      name_idx  767  NULL         10145962  Using index 
1 SIMPLE  MEDIA ref  name      name   63  imagedb_production.IMAGE.name   1 
1 SIMPLE  CAP  eq_ref PRIMARY,idx_contentItemID PRIMARY   4  dccms_production.MEDIA.contentItemID 1  Using index 

(对不起输出看起来像废话)

这个查询花费接近12分钟有什么办法之前经历和调整,我可以加快这MySQL数据库实例?

信息

'imagedb', 'CREATE TABLE `imagedb` (
    `multimediaID` int(11) NOT NULL auto_increment, 
    `name` varchar(255) NOT NULL, 
    `content` mediumblob, 
    `description` longtext, 
    `mime_type` varchar(255) default NULL, 
    PRIMARY KEY (`multimediaID`), 
    KEY `name_idx` (`name`) 
) ENGINE=InnoDB AUTO_INCREMENT=2320759 DEFAULT CHARSET=utf8' 


'tblmedia', 'CREATE TABLE `tblmedia` (
    `mediaID` int(11) NOT NULL auto_increment, 
    `contentItemID` int(11) NOT NULL default ''0'', 
    `name` varchar(255) default NULL, 
    `width` int(11) default NULL, 
    `height` int(11) default NULL, 
    `file1Size` bigint(20) default NULL, 
    `file2Size` bigint(20) default NULL, 
    `mediaSlug` int(11) default NULL, 
    PRIMARY KEY (`mediaID`), 
    KEY `idx_contentItemID` (`contentItemID`), 
    KEY `name` (`name`(20)) 
) ENGINE=InnoDB AUTO_INCREMENT=899975 DEFAULT CHARSET=utf8' 

'tblmultimedia', 'CREATE TABLE `tblmultimedia` (
    `contentItemID` int(11) NOT NULL default ''0'', 
    `caption` text, 
    `mimeType` varchar(255) default NULL, 
    PRIMARY KEY (`contentItemID`), 
    KEY `idx_contentItemID` (`contentItemID`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8' 
+0

你是否需要所有表中涉及的所有列?连接中使用的列的数据类型是什么?任何索引 - 如果是的话,你是否使用[ANALYZE TABLE](http://dev.mysql.com/doc/refman/5.0/en/analyze-table.html) – 2010-07-22 21:47:10

+0

刷新了索引。你还可以为每个涉及的表添加“show create table”的输出吗? – TheJacobTaylor 2010-07-22 21:51:01

+0

10M行并不是那么多。您可能耗尽内存或缓冲区空间。如果系统不得不重新回到磁盘上,那会降低速度。 – TheJacobTaylor 2010-07-22 21:51:51

回答

0

你有10,000,000行没有排序,我会解决这个问题。添加一个默认的order by子句。

旧版本的MySQL没有考虑限制条款,直到更晚。我认为新版本可以做得更好。您可能想要检查不同的方式来限制结果集。

相关问题