两个不同查询之间的速度

时间:2012-03-27 18:40:48

标签: php mysql database

哪个查询更快以及为什么对于表中包含1M记录的数据库?如何优化查询? 第一个:

SELECT id,column1,column2 FROM `table1` WHERE MATCH(column1) 
AGAINST('string1 string2 string3 ' in boolean mode) ORDER BY column2 ASC LIMIT 10

第二个:

SELECT id,column1,column2 FROM `table1` WHERE column1 LIKE %string1% 
OR column1 LIKE %string2% OR column1 LIKE %string3% OR column2 LIKE %string1% 
OR column2 LIKE %string2% OR column2 LIKE %string3% OR column3 LIKE %string1% OR
column3 LIKE %string2% OR column3 LIKE %string3%  ORDER BY column2 ASC LIMIT 10

3 个答案:

答案 0 :(得分:3)

匹配是全文搜索。如果您为MySQL创建了全文搜索索引,它将比LIKE'%...%'快得多,因为在这种情况下将没有索引。

'%...%'上没有任何索引的原因是因为在字符串的每个字母上创建索引都不是很快。

这两个查询的功能也不同,全文索引扫描单词,只能用于单词。你不能用“匹配”(布尔模式中的'mi')搜索字符串“emil”。这是行不通的。 当然有这样的作品。

答案 1 :(得分:2)

MATCH ... REPLACE读取速度更快,但插入时间更长。你必须在它上面创建一个索引。如果你想使用它,你也会有很多要求(它只适用于MyISAM表)

你应该读到这个: http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html

以下是我所说的限制: http://dev.mysql.com/doc/refman/5.0/en/fulltext-restrictions.html

答案 2 :(得分:0)

like '%foo%'类型匹配使得无法使用索引,并且DB每次都必须进行全表扫描。全文版本应该快得多。