我想知道MySQL如何在搜索时找到表中的行:
select * from table where field = 'text';
它是否使用特定的搜索算法?它几乎是在表格中查找信息的最快方式吗?或者使用其他算法(如Boyer-Moore)构建搜索宏的工作更快?
答案 0 :(得分:3)
如果字段上有索引,则数据库通常使用b树进行索引搜索。如果没有索引,则扫描整个表。这描述了MySql中使用的一些技术
http://dev.mysql.com/doc/refman/5.5/en/index-btree-hash.html
许多小时的工作都用于优化MySql。利用已经完成的工作,并拒绝重新尝试
答案 1 :(得分:1)
对于该查询,除了搜索该表的每个条目并将其字段列与该字符串进行比较之外,它除此之外什么都不做。
不需要Boyer-Moore,因为它与请求完全相同,而不是询问该字段是否包含该字符串。
答案 2 :(得分:1)
如果您对如何找到这些记录感兴趣,请尝试使用EXPLAIN关键字执行:
EXPLAIN select * from table where field = 'text';
我建议您查看this article以更好地了解后台发生的情况。
如果你能够自己写一些更快的东西,我会感到非常惊讶。您可以查看在相关表格上创建索引以加快选择。