大家好!下面的SQL语句执行时间为9s,请大家帮忙看看是否有进一步提高查询速度的地方。[CODE]
CREATE TABLE TempTable_1
AS SELECT
ITEMSET_ONE.DocID, SUM( ITEMSET_ONE.Freq+ EX_ITEMSET_ONE.Freq) Score
FROM
ITEMSET_ONE, EX_ITEMSET_ONE, CandidateDoc7
WHERE
ITEMSET_ONE.Word = EX_ITEMSET_ONE.Word
AND CandidateDoc7.DocID = ITEMSET_ONE.DocID
group by
ITEMSET_ONE.DocID;
[/CODE]
这个SQL语句其实是建立一个临时表,它涉及3个表,DocsFeature, CandidateDocs, ExampleDoc。总的来说,这个SQL语句是实现文本查询的,根据一个样本文档,查询一个文本集合中与之相关的其它文本。样本文本由一组特征词构成,特征词存在表 ExampleDoc 中。文本集合包含许多文本,各个文本的特征存在 DocsFeature 中。表 CandidateDocs 中存有一些 文本编号。只有DocsFeature 中那些与 ExampleDoc 至少共享一个词,并且其文本编号存在于 CandidateDocs 中的 文本 才会被 SELECT 出来。创建 DocsFeature 表的语句是[CODE]
CREATE TABLE `DocsFeature` (
`DocID` varchar(8) COLLATE latin1_bin NOT NULL,
`Word` varchar(20) COLLATE latin1_bin NOT NULL,
`Freq` tinyint(3) unsigned NOT NULL DEFAULT '0',
`TitleWord` tinyint(1) NOT NULL,
`CommonWord` tinyint(1) NOT NULL,
`NrNsNtNz` char(2) COLLATE latin1_bin NOT NULL,
KEY `idx_DocID` (`DocID`),
KEY `idx_Word` (`Word`),
KEY `idx_NrNsNtNz_TitleWord` (`NrNsNtNz`,`TitleWord`),
KEY `idx_TitleWord` (`TitleWord`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin
[/CODE]
* 表 DocsFeature 的示例如下:[CODE]
....
A111 Computer 9 n (Document A111 contains 'Computer',and it occurres 9 times)
C27 Dolphin 5 n (Document C27 contains 'Dolphin',and it occurres 5 times)D21 Food 2 n (Document D21 contains 'Food',and it occurres 2 times).....
[/CODE]
* 表 CandidateDocs 只有一个 字段 field, 即 DocID。字段DocID上建有索引。* 表 ExampleDoc table 的创建语句如下: [CODE]
CREATE TABLE `ExampleDoc` (
`Word` varchar(20) DEFAULT NULL,
`Freq` tinyint(3) unsigned NOT NULL DEFAULT '0',
`TitleWord` tinyint(1) DEFAULT NULL,
`CommonWord` tinyint(1) DEFAULT NULL,
`NrNsNtNz` char(2) DEFAULT NULL,
KEY `idx_Word` (`Word`),
KEY `idx_NrNsNtNz` (`NrNsNtNz`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
[/CODE]
在 CandidateDocs 中大约有 3万多条记录; ExampleDoc 中有约90条记录; DocsFeature中有约7百7十万条记录。
这条SQL语句耗时约9秒,请大家看看这是否合理,是否还有改进的余地。谢谢!
CREATE TABLE TempTable_1
AS SELECT
ITEMSET_ONE.DocID, SUM( ITEMSET_ONE.Freq+ EX_ITEMSET_ONE.Freq) Score
FROM
ITEMSET_ONE, EX_ITEMSET_ONE, CandidateDoc7
WHERE
ITEMSET_ONE.Word = EX_ITEMSET_ONE.Word
AND CandidateDoc7.DocID = ITEMSET_ONE.DocID
group by
ITEMSET_ONE.DocID;
[/CODE]
这个SQL语句其实是建立一个临时表,它涉及3个表,DocsFeature, CandidateDocs, ExampleDoc。总的来说,这个SQL语句是实现文本查询的,根据一个样本文档,查询一个文本集合中与之相关的其它文本。样本文本由一组特征词构成,特征词存在表 ExampleDoc 中。文本集合包含许多文本,各个文本的特征存在 DocsFeature 中。表 CandidateDocs 中存有一些 文本编号。只有DocsFeature 中那些与 ExampleDoc 至少共享一个词,并且其文本编号存在于 CandidateDocs 中的 文本 才会被 SELECT 出来。创建 DocsFeature 表的语句是[CODE]
CREATE TABLE `DocsFeature` (
`DocID` varchar(8) COLLATE latin1_bin NOT NULL,
`Word` varchar(20) COLLATE latin1_bin NOT NULL,
`Freq` tinyint(3) unsigned NOT NULL DEFAULT '0',
`TitleWord` tinyint(1) NOT NULL,
`CommonWord` tinyint(1) NOT NULL,
`NrNsNtNz` char(2) COLLATE latin1_bin NOT NULL,
KEY `idx_DocID` (`DocID`),
KEY `idx_Word` (`Word`),
KEY `idx_NrNsNtNz_TitleWord` (`NrNsNtNz`,`TitleWord`),
KEY `idx_TitleWord` (`TitleWord`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin
[/CODE]
* 表 DocsFeature 的示例如下:[CODE]
....
A111 Computer 9 n (Document A111 contains 'Computer',and it occurres 9 times)
C27 Dolphin 5 n (Document C27 contains 'Dolphin',and it occurres 5 times)D21 Food 2 n (Document D21 contains 'Food',and it occurres 2 times).....
[/CODE]
* 表 CandidateDocs 只有一个 字段 field, 即 DocID。字段DocID上建有索引。* 表 ExampleDoc table 的创建语句如下: [CODE]
CREATE TABLE `ExampleDoc` (
`Word` varchar(20) DEFAULT NULL,
`Freq` tinyint(3) unsigned NOT NULL DEFAULT '0',
`TitleWord` tinyint(1) DEFAULT NULL,
`CommonWord` tinyint(1) DEFAULT NULL,
`NrNsNtNz` char(2) DEFAULT NULL,
KEY `idx_Word` (`Word`),
KEY `idx_NrNsNtNz` (`NrNsNtNz`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
[/CODE]
在 CandidateDocs 中大约有 3万多条记录; ExampleDoc 中有约90条记录; DocsFeature中有约7百7十万条记录。
这条SQL语句耗时约9秒,请大家看看这是否合理,是否还有改进的余地。谢谢!
==========
大家好!下面的SQL语句执行时间为9s,请大家帮忙看看是否有进一步提高查询速度的地方。CREATE TABLE TempTable_1
AS SELECT
ITEMSET_ONE.DocID, SUM( ITEMSET_ONE.Freq+ EX_ITEMSET_ONE.Freq) Score
FROM
ITEMSET_ONE, EX_ITEMSET_ONE, CandidateDoc7
WHERE
ITEMSET_ONE.Word = EX_ITEMSET_ONE.Word
AND CandidateDoc7.DocID = ITEMSET_ONE.DocID
group by
ITEMSET_ONE.DocID;这个SQL语句其实是建立一个临时表,它涉及3个表,DocsFeature, CandidateDocs, ExampleDoc。总的来说,这个SQL语句是实现文本查询的,根据一个样本文档,查询一个文本集合中与之相关的其它文本。样本文本由一组特征词构成,特征词存在表 ExampleDoc 中。文本集合包含许多文本,各个文本的特征存在 DocsFeature 中。表 CandidateDocs 中存有一些 文本编号。只有DocsFeature 中那些与 ExampleDoc 至少共享一个词,并且其文本编号存在于 CandidateDocs 中的 文本 才会被 SELECT 出来。创建 DocsFeature 表的语句是[code]
CREATE TABLE `DocsFeature` (
`DocID` varchar(8) COLLATE latin1_bin NOT NULL,
`Word` varchar(20) COLLATE latin1_bin NOT NULL,
`Freq` tinyint(3) unsigned NOT NULL DEFAULT '0',
`TitleWord` tinyint(1) NOT NULL,
`CommonWord` tinyint(1) NOT NULL,
`NrNsNtNz` char(2) COLLATE latin1_bin NOT NULL,
KEY `idx_DocID` (`DocID`),
KEY `idx_Word` (`Word`),
KEY `idx_NrNsNtNz_TitleWord` (`NrNsNtNz`,`TitleWord`),
KEY `idx_TitleWord` (`TitleWord`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin
[/code]* 表 DocsFeature 的示例如下:[code]
....
A111 Computer 9 n (Document A111 contains 'Computer',and it occurres 9 times)
C27 Dolphin 5 n (Document C27 contains 'Dolphin',and it occurres 5 times)D21 Food 2 n (Document D21 contains 'Food',and it occurres 2 times).....
[/code]
* 表 CandidateDocs 只有一个 字段 field, 即 DocID。字段DocID上建有索引。* 表 ExampleDoc table 的创建语句如下:[code]
CREATE TABLE `ExampleDoc` (
`Word` varchar(20) DEFAULT NULL,
`Freq` tinyint(3) unsigned NOT NULL DEFAULT '0',
`TitleWord` tinyint(1) DEFAULT NULL,
`CommonWord` tinyint(1) DEFAULT NULL,
`NrNsNtNz` char(2) DEFAULT NULL,
KEY `idx_Word` (`Word`),
KEY `idx_NrNsNtNz` (`NrNsNtNz`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
[/code]
在 CandidateDocs 中大约有 3万多条记录; ExampleDoc 中有约90条记录; DocsFeature中有约7百7十万条记录。
这条SQL语句耗时约9秒,请大家看看这是否合理,是否还有改进的余地。谢谢!
CREATE TABLE TempTable_1
AS SELECT
ITEMSET_ONE.DocID, SUM( ITEMSET_ONE.Freq+ EX_ITEMSET_ONE.Freq) Score
FROM
ITEMSET_ONE, EX_ITEMSET_ONE, CandidateDoc7
WHERE
ITEMSET_ONE.Word = EX_ITEMSET_ONE.Word
AND CandidateDoc7.DocID = ITEMSET_ONE.DocID
group by
ITEMSET_ONE.DocID;
这个SQL语句其实是建立一个临时表,它涉及3个表,DocsFeature, CandidateDocs, ExampleDoc。总的来说,这个SQL语句是实现文本查询的,根据一个样本文档,查询一个文本集合中与之相关的其它文本。样本文本由一组特征词构成,特征词存在表 ExampleDoc 中。文本集合包含许多文本,各个文本的特征存在 DocsFeature 中。表 CandidateDocs 中存有一些 文本编号。只有DocsFeature 中那些与 ExampleDoc 至少共享一个词,并且其文本编号存在于 CandidateDocs 中的 文本 才会被 SELECT 出来。创建 DocsFeature 表的语句是
CREATE TABLE `DocsFeature` (
`DocID` varchar(8) COLLATE latin1_bin NOT NULL,
`Word` varchar(20) COLLATE latin1_bin NOT NULL,
`Freq` tinyint(3) unsigned NOT NULL DEFAULT '0',
`TitleWord` tinyint(1) NOT NULL,
`CommonWord` tinyint(1) NOT NULL,
`NrNsNtNz` char(2) COLLATE latin1_bin NOT NULL,
KEY `idx_DocID` (`DocID`),
KEY `idx_Word` (`Word`),
KEY `idx_NrNsNtNz_TitleWord` (`NrNsNtNz`,`TitleWord`),
KEY `idx_TitleWord` (`TitleWord`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_bin* 表 DocsFeature 的示例如下:
....
A111 Computer 9 n (Document A111 contains 'Computer',and it occurres 9 times)
C27 Dolphin 5 n (Document C27 contains 'Dolphin',and it occurres 5 times)D21 Food 2 n (Document D21 contains 'Food',and it occurres 2 times).....
* 表 CandidateDocs 只有一个 字段 field, 即 DocID。字段DocID上建有索引。* 表 ExampleDoc table 的创建语句如下:
CREATE TABLE `ExampleDoc` (
`Word` varchar(20) DEFAULT NULL,
`Freq` tinyint(3) unsigned NOT NULL DEFAULT '0',
`TitleWord` tinyint(1) DEFAULT NULL,
`CommonWord` tinyint(1) DEFAULT NULL,
`NrNsNtNz` char(2) DEFAULT NULL,
KEY `idx_Word` (`Word`),
KEY `idx_NrNsNtNz` (`NrNsNtNz`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1
在 CandidateDocs 中大约有 3万多条记录; ExampleDoc 中有约90条记录; DocsFeature中有约7百7十万条记录。
这条SQL语句耗时约9秒,请大家看看这是否合理,是否还有改进的余地。谢谢!