Mysql 基于文本列的筛选
从概念上讲,基于文本列进行精确匹配筛选比基于键获取一组行并使用编程语言进行筛选慢吗 例如:Mysql 基于文本列的筛选,mysql,sql,performance,innodb,Mysql,Sql,Performance,Innodb,从概念上讲,基于文本列进行精确匹配筛选比基于键获取一组行并使用编程语言进行筛选慢吗 例如: select columns from table where textcolumn='exactphrase'; vs 我基本上很好奇MySQL(Innodb)是如何处理过滤文本列的,以及可能存在的性能缺陷(如果有的话)。tldr在“查找”记录时不会有性能差异。 由于正在使用(索引)PK,因此最多将返回一条记录。服务器足够聪明,不会对文本列执行表扫描,即使它因为PK的1-1基数而没有索引。(查询计划器
select columns from table where textcolumn='exactphrase';
vs
我基本上很好奇MySQL(Innodb)是如何处理过滤文本列的,以及可能存在的性能缺陷(如果有的话)。tldr在“查找”记录时不会有性能差异。 由于正在使用(索引)PK,因此最多将返回一条记录。服务器足够聪明,不会对文本列执行表扫描,即使它因为PK的1-1基数而没有索引。(查询计划器很聪明。) 区别在于:
1虽然可以想象非常退化的情况,但在没有明确的使用/性能情况下,应将其视为“等效时间”。然而,IMOHO在客户端这样做却没有更多的理由,这仍然是草率的在“查找”记录时不会有性能差异。 由于正在使用(索引)PK,因此最多将返回一条记录。服务器足够聪明,不会对文本列执行表扫描,即使它因为PK的1-1基数而没有索引。(查询计划器很聪明。) 区别在于:
1虽然可以想象非常退化的情况,但在没有明确的使用/性能情况下,应将其视为“等效时间”。然而,IMOHO在客户端这样做却没有更多的理由,这仍然是草率的。也许吧,但我对此表示怀疑 在一组约束中,每个表、数据库和查询都是不同的。在单个服务器上,查询的“速度”取决于以下因素(以及许多其他因素):
- 索引
- 列的基数-有多少个不同的值与值的数量
- 列的宽度
- 表中的记录数
- 查询中返回的字节数
- 是否有其他人正在使用数据库/服务器
- 索引
- 列的基数-有多少个不同的值与值的数量
- 列的宽度
- 表中的记录数
- 查询中返回的字节数
- 是否有其他人正在使用数据库/服务器
唯一确定的方法是自己尝试一下。如果您遇到问题,您可以随时发布您的查询、解释计划以及表和索引定义,也许有人可以提供帮助。对不起,我更新了我的帖子。我很感激你的解释,但我无意中一直在写主键,其实我只是指一个索引列。@tau再说一次,现代查询规划师很聪明。他们几乎总是喜欢索引而不是表扫描,这取决于统计数据。如果有疑问,请询问使用的具体查询计划。对不起,我更新了我的帖子。我很感激你的解释,但我无意中一直在写主键,其实我只是指一个索引列。@tau再说一次,现代查询规划师很聪明。他们几乎总是喜欢索引而不是表扫描,这取决于统计数据。如果有疑问,询问使用的具体查询计划。
select columns from table where key='key';
for (results : resultset) {
if (resulsts.getString(textcolumn).equals(exactphrase)) { ... } }