Mysql SQL索引字符串以提高查询速度

Mysql SQL索引字符串以提高查询速度,mysql,performance,Mysql,Performance,我希望尽快查询字符串,其中搜索的字符串在数据库中可能有数千个匹配项。还需要满足其他条件,并且返回的结果集可能永远不会超过100行 我提出的选择是有两张桌子: 表项目 id | name_id id | string 和 表名称 id | name_id id | string 其中,两个表上的ID都是自动递增的。和名称。字符串是唯一的name\u id当然不是唯一的,并且会有一个索引 我将从表项目中选择如下内容: SELECT names.string FROM items JO

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

我提出的选择是有两张桌子:

项目

id | name_id 
id | string 

名称

id | name_id 
id | string 
其中,两个表上的ID都是自动递增的。和
名称。字符串
是唯一的
name\u id
当然不是唯一的,并且会有一个索引

我将从表
项目中选择如下内容:

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.*/
当然,我的目的是节省空间和提高速度

这会比只使用一个简单的
从name='abcdefg'
的项目中选择*更快吗

根据我提供的信息,我应该解决哪些问题

另外,我没有搜索子字符串。只需完全匹配,即
names.string='abcefg'


请随意忽略这个问题,因为它相当广泛,但是有没有其他方法可以明显更快(最好没有显著的复杂性增加)?

创建带有字符串值的引用表有很多很好的理由。这种正常化通常是个好主意

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

SELECT items.*
FROM items
WHERE items.string = 'abcdefg' AND items.someColumn = <somevalue>;
MySQL和SQL Server都是如此


您可以为字符串列编制索引,对于大多数查询,使用该索引将非常有效。(如果您开始混合排序规则,会有一些问题,但让我们先把这些问题放在一边,然后再回答。)

您应该选择使用哪个数据库:MySQL还是SQL Server?