我有一个MySQL表。它有两列。第一个是唯一标识符(INT),第二个是字符串(VARCHAR)。有大约170万条记录。目前,我唯一的搜索是:
select name from artist_name where name like '$q%'"
我的问题是什么是最好的索引放在这个表上,我怎么能提高SQL语句的效率,如果有的话?在某些时候,我将介绍第二个表格,它将加入第一列,但稍后我会解决这个问题。
答案 0 :(得分:0)
看起来像是在第二列(artist_name
)上放置一个索引,以便使用like
子句的搜索查询可以更快地运行将是最佳做法。毫无疑问,您可以在唯一标识符上添加唯一索引(如果它尚不存在)。
此外,您可以考虑将索引设置为部分指定要搜索的艺术家姓名的长度。
检查this article以获取有关MySql中索引类型的详细信息。
答案 1 :(得分:0)
这样做,
在mysql提示符下执行此查询并记录执行时间
SELECT名称 来自artist_name 姓名 像'$ q%'“;
安装sphinxsearch。
现在执行如下所示的相同查询
SELECT名称 来自artist_name MATERE 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。
答案 2 :(得分:-1)
使用 B树索引
检查this。