如何优化mysql查询以获得更快的结果

时间:2019-06-05 20:44:53

标签: mysql

我有3张桌子

1)文件:文件主数据

2)user_files:用户信息

3)file_pages:文件的每个页面在此表中都有一行,并具有一个带有FULLTEXT index

的字段,作为page_content。

对于搜索,我编写了此查询

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.)与第一个查询进行比较!

0 个答案:

没有答案