php - 两个不同查询之间的速度

标签 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

最佳答案

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

'%...%' 上不能有任何索引的原因是因为在字符串的每个字母上创建索引根本不够快。

这两个查询也有不同的功能,全文索引扫描单词并且只对单词可用。你不能用“match against('mi' in boolean mode)”来搜索字符串“emil”。那是行不通的。 当然这样也行。

关于php - 两个不同查询之间的速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9895573/

相关文章:

php - MySql 事务仅在控制台中有效

php - PDOStatement::getColumnMeta 返回原始表名而不是 View 名

mysql - 如何在 Docker 中运行 Sequelize 迁移

mysql - 如何从引用另一个表的 2 列聚合数据?

php - 计数器避免使用多线程请求重复

php - 使用 CakePHP 如何从数据库中导出数据。不包括架构

php - 使用 PHP 和 MYSQL 的 PDO 插入操作不起作用

Mysql - 模拟先前多行(不仅仅是一行)的滞后

node.js - MongoDB : querying documents with two equal fields, $match 和 $eq

linux - 如何在linux上删除postgresql数据库