sql - SQL 中字符串比较与 int 连接的性能

标签 sql performance join foreign-keys varchar

公认在 int 列上搜索表比在 string 列(例如 varchar)上搜索更快。

但是,如果我有一个带有 Color 列的 Shirt 表,那么创建一个 Color 表,该表上的主键是 Shirt 表上的外键,性能会更高吗?在搜索绿色衬衫时,连接是否会抵消将衬衫上颜色列中的值设为 int 而不是字符串值(例如“绿色”)的性能优势?

最佳答案

与正在执行的其他操作相比,两种方法之间不太可能有太大的性能差异。如果您只有少数几种颜色(最多几百种),则颜色表适合大多数数据库中的单个页面。颜色上的索引将使查找速度非常快,并且不会引起任何 I/O 事件(在第一次运行加载页面之后)。

字符串比较取决于数据库,但它确实涉及一个函数并从页面读取数据。所以,它不是免费的。当然,不同的数据库对于字符串函数可能具有不同的性能特征。

它应该存储在哪里应该是您的应用程序的功能。假设您有一个将颜色呈现给用户的应用程序。有一天,您可能想用西类牙语、斯瓦希里语或中文显示颜色的名称。如果是这样,拥有一个单独的表会使这种国际化更加容易。更简单地说,您可能希望防止输入“Grene”,如果是这样,拥有这样的表格会使选择列表更容易。

另一方面,如果性能是您唯一关心的问题,那也没什么不同。在其他情况下,查找表实际上可能比非规范化表更快。当字符串很长时会发生这种情况,从而增加了较大表中每条记录的长度。更大的表意味着更多的页面,这需要更长的时间才能加载到内存中。

关于sql - SQL 中字符串比较与 int 连接的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12431107/

相关文章:

php - 使用 MySql 和 PHP 创建论坛网站时出现问题。不确定如何显示主题

SQL连接问题

java - 有没有办法引用规范(Spring)的审核表?

MySQL连接表只返回一个匹配项

sql-server - 提高更新语句性能

php - 如何根据来自表单的用户输入从另一个表插入 mysql 中的数据字段?

mysql - 按没有匹配对象的匹配数排序

SQL Server : Pattern Matching in Case Statements with Multiple Possible Conditions

node.js - npm 脚本的时间/性能指标

performance - 如何有效地从 Spark 中的每一列中找到不同的值