gpt4 book ai didi

mysql - 用于查询速度的 SQL 索引字符串

转载 作者:行者123 更新时间:2023-11-30 22:53:59 26 4
gpt4 key购买 nike

我想尽快查询字符串,其中搜索到的字符串在数据库中可能有数千个匹配项。还会满足其他条件,返回的结果集可能永远不会超过 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'

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

最佳答案

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

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

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

那么下面两个索引中的一个最适合这个查询:

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

在 MySQL 和 SQL Server 中都是如此。

您可以为字符串列建立索引,并且使用该索引对于大多数查询来说都是高效的。 (如果您开始混合排序规则,就会出现问题,但让我们将此类问题搁置一旁以获得此答案。)

关于mysql - 用于查询速度的 SQL 索引字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27197653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com