登录
  • #eecs

急!关于数据库检索效率优化的问题

LzhJeremy
1442
4






最近在公司用Node JS 做网站后台功能,需要关联三张表然后返回所有满足条件的image信息的list,由于程序发布的远端PC配置比较渣,在进行复杂关联检索时,用时比较长,以前数据库在学校学的比较渣,自己确实也不是技术方面的大牛,恳请各位前辈可以给我一些解决建议,自己也可以得到学习,表的具体结构和query如下:

table 1:

image:

image_id, bigint(20) unsigned NOT NULL(PK)

image_path, varchar(512) NOT NULL

mailpiece_id, varchar(100) NOT NULL

scanner_id, enum('BL','BR','FL')

image_type, varchar(100) NOT NULL

source_id, varchar(100) NOT NULL

orientation, tinyint(3) unsigned NOT NULL

table 2 :

mailpiece:

mailpiece_key, bigint(20) unsigned NOT NULL(PK)

mailpiece_id, varchar(100) NOT NULL

tesetset_id, bigint(20) unsigned NOT NULL

image_path, varchar(512) NOT NULL

mailpiece_id, varchar(100) NOT NULL

table 3:

redirections:

sortcode, varchar(100) NOT NULL(PK : sortcode + mailpiece_id)

mailpiece_id, varchar(100) NOT NULL

redirection_id, bigint(20) NOT NULL

QUERY:

SELECT mailpieces.*, rds.sortcode FROM

(SELECT i.* FROM image i JOIN mailpiece USING (mailpiece_id)

WHERE mailpiece_id IN (SELECT mailpiece_id FROM redirections)

AND testset_id = 51 AND (mailpiece_key - 1) % 1 = 0) mailpieces INNER JOIN redirections rds USING (mailpiece_id);

如果有什么描述不清楚的地方麻烦各位留言,我会尽快回复,急!!!谢谢各位!!{:4_108:}{:4_108:}



补充内容 (2016-4-6 05:20):

一旦关联表redirections,检索就会变得非常慢,倘若把query 第三行SELECT mailpiece_id FROM redirections 替换成SELECT mailpiece_id FROM sortcodes INNER JOIN sortcode_sequence USING (sequence_id)就会很快

补充内容 (2016-4-6 05:22):

接上面的补充,但是整个检索结果又必须匹配表redirections里面的mailpiece_id,是不是因为这张表的PK是两列合成,如果把mailpiece_id设置成INDEX会不会好一些,恳请大家解答一下
4条回复
热度排序

发表回复