繁体   English   中英

MySQL:结合速度查询

[英]MySQL: combining queries for speed

MySQL 超过 1000 万行的数据库。 我目前正在显示前十个结果,然后计算匹配总数。 前十个结果的内容在PHP中回显,然后显示总命中数。

第一条语句(快速):

SELECT * FROM `bigTable` WHERE `name` LIKE '%steve%' LIMIT 10

第二条语句(慢):

SELECT COUNT(1) FROM `bigTable` WHERE `name` LIKE '%steve%'

我想结合这些查询来提高速度。 我想保留用户在等待系统找到总数时看到前十个结果的功能。 这可能吗?

您的第二个查询需要检查每一行的名称列。 如果您在该条件下需要该号码,它将始终很慢。

您可能会考虑在 row(id) 中保留一个包含 word-occurs的单独表,(通过所有插入/更新/删除保持更新,可以使用触发器进行维护)。 您的搜索将始终使用 word='name' 连接到此表(要在此列上建立索引:word)。

您也可以按照其他人的建议使用 FULLTEXT 索引; 如果可用的话。

如果您要搜索“单词”,则使用FULLTEXT索引和MATCH(name) AGAINST("+steve") - 两个查询都会快得多

另一方面,如果您必须搜索单词(等)的中间部分,那么使用LIKE和前导通配符会尽可能快。 但是, COUNT总是必须扫描整个表,而SELECT *也会扫描到表的末尾,除非它在此之前找到 10 个。

根据您使用的版本,您可以使用SQL_CALC_FOUND_ROWSFOUND_ROWS ,但速度不会快很多。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM