我有一个 MySQL 表。它有两列。第一个是唯一标识符 (INT),第二个是字符串 (VARCHAR)。大约有 170 万条记录。目前,我正在做的唯一搜索是:
select name from artist_name where name like '$q%'"
我的问题是放在这张表上的最佳索引是什么,如果有的话,我怎样才能提高 SQL 语句的效率?在某个时候,我将介绍第二个表,它将加入第一列,但我会在稍后解决这个问题。
最好在第二列 ( ) 上放置索引,artist_name
以便使用like
子句的搜索查询可以更快地工作,这将是最佳做法。毫无疑问,您可以在唯一标识符上添加唯一索引,如果它不存在的话。
此外,您可以考虑将索引作为部分索引,指定要搜索的艺术家姓名的长度。
查看这篇文章以获取有关 MySql 中索引类型的详细信息。
做这个,
在mysql提示符下执行此查询并记录执行时间,
从艺术家名称中选择名称,其中名称如“$q%””;
安装狮身人面像搜索。
现在执行如下相同的查询,
从艺术家名称中选择名称 WHERE MATCH('$q');
您将看到执行时间显着减少。
我在上面给出了高层次的知识。
其他可用选项:
1. mysql全文搜索:它也很不错,如果你不是在寻找自定义任何东西,你可以通过做一个来使用mysql全文,
ALTER TABLE artist_name ADD FULLTEXT(name);
SELECT *
FROM artist_name
WHERE MATCH(name)
AGAINST ($q);
如果您需要有关如何安装 sphinx 搜索的任何帮助,我会在那里。
下次在你的 sql 查询中遵循正确的约定,这是 STACKOVERFLOW,而不是 FACEBOOK。
使用B 树索引
检查这个。