表结构优化SQL查询
对于两个表中,创建查询在下面给出:
表1:(file_path_key,dir_path_key)
创建表table1 (file_path_key varchar(500),dir_path_key varchar(500),主键(file_path_key))engine = innodb;
实施例,file_path_key = /home/playstation/a.txt
dir_path_key = /家庭/游戏机/
表2:(file_path_key,HASH_KEY)
创建表表2(file_path_key varchar(500)非空,hash_key bigint(20)非空,外键(file_path_key)引用 表1(file_path_key)on upd吃级联删除级联) engine = innodb;
目的:
Given a hash value *H* and a directory string *D*, I need to find all those
hashes which equal to *H* from Table2, such that, the corresponding file entry
doesn't have *D* as it's directory.
在这种特殊情况下,表1有大约40,000项和表2拥有500万个词条,这让我当前的查询很慢。
从表1中选择不同s1.file_path_key为S1加入(SELECT * FROM表2其中HASH_KEY = H)为S2上s1.file_path_key = s2.file_path_key和s1.dir_path_key = d!;
你的关键的(潜在的)尺寸肯定没有帮助。它看起来并不像你需要潜在的关键范围 - 你会考虑切换到你加入的自动主键吗?这应该会大大减少你的表的大小 - 首先,这意味着'file_path_key'可以变成'file'(这可能会减少不匹配)。太糟糕了,你不使用支持递归CTE的RDBMS--它们完美适用于文件夹结构。 – 2012-03-06 17:39:25