SQL索引字符串查询速度

时间:2014-11-29 00:39:12

标签: mysql performance

我希望尽快查询字符串,其中搜索的字符串在数据库中可能有数千个匹配项。还有其他条件需要满足,返回的结果集可能永远不会超过100行。

我提出的选项是有两个表:

项目

id | name_id 


名称

id | string 

两个表上的ID都是自动增量。而names.string是独一无二的。 name_id当然不是唯一的,并且会有一个索引。

我会从表格items中选择:

SELECT names.string FROM items
JOIN names
ON items.name_id = names.id
WHERE names.string = 'abcdefg'
AND items.someColumn = items.someValue /*to further filter my results.*/

我的目的是节省空间并提高速度。

这会比使用简单的SELECT * from items WHERE name='abcdefg'更快吗?

根据我提供的信息,我应该解决任何问题吗?

另外,我不是在寻找子串。只是完整的匹配,即names.string = 'abcefg'

随意忽略这个问题,因为它相当广泛,但是其他方法是否会明显更快(最好不会增加复杂性)?

1 个答案:

答案 0 :(得分:0)

使用字符串值创建引用表有很多充分的理由。这种规范化通常是一个好主意。

但是,在您的情况下,出于性能原因,不需要它。如果您的查询类似于:

SELECT items.*
FROM items
WHERE items.string = 'abcdefg' AND items.someColumn = <somevalue>;

然后,以下两个索引中的任何一个最适合此查询:

items(string, somecolumn)
items(somecolumn, string)

在MySQL和SQL Server中都是如此。

您可以索引字符串列,并且使用索引对大多数查询都是有效的。 (如果你开始混合排序,就会出现问题,但是让我们把这样的问题放到这个答案中。)