我有3张桌子
1)文件:文件主数据
2)user_files:用户信息
3)file_pages:文件的每个页面在此表中都有一行,并具有一个带有FULLTEXT
index
对于搜索,我编写了此查询
SELECT * FROM files
right join file_pages on files.id = file_pages.doc_id
right join user_files on files.id = user_files.file_id
WHERE (files.status='C' or files.status='L') and (
(user_files.description LIKE '%space%')
or
(user_files.title LIKE '%space%')
or
(file_pages.page_content LIKE '%space%' ) group by files.id
此查询结果:Showing rows 0 - 24 (399 total, Query took 6.9195 seconds.)
但是当我搜索时没有加入
SELECT * FROM `file_pages` WHERE `page_content` LIKE '%space%'
结果是:Showing rows 0 - 24 (7973 total, Query took 0.0026 seconds.)
与我的查询一起需要7秒,但查询的主要部分只需0.002秒即可执行
现在我的file_pages表很小,大约有1万行,但是当它增长到10万行时,我的搜索时间增加到120秒
我怎样才能获得更好的速度?
更新:看来这与使用“like” and wildcards
无关,因为当我删除部分联接时
SELECT * FROM files
right join file_pages on files.id = file_pages.doc_id
WHERE (files.status='C' or files.status='L') and
( file_pages.page_content LIKE '%space%' ) group by files.id
这花了Showing rows 0 - 24 (399 total, Query took 0.7110 seconds.)
与第一个查询进行比较!