在使用MySQL时,最好使用*来调用大量字段吗?

14 浏览
0 Comments

在使用MySQL时,最好使用*来调用大量字段吗?

我知道通常来说,在构建mysql查询时,为每个需要的项目命名是更好的性能选择,但是例如在个人资料页面上,我可能需要除了一些项目之外的所有项目。

所以,如果没有进行大量测试,也许有更多经验的人可以提供一些建议吗?

这样会更糟吗?

SELECT * FROM users WHERE user_id=1 AND user_role >

我更喜欢列出所有项目,因为这样在页面上更容易看到我从数据库中可以获取的内容,但如果这样更快的话,我就不列出它们。

0
0 Comments

在使用MySQL进行查询时,最好指定所需的列,除非您的编程语言支持关联列表/数组,以便可以通过名称检索名称。

如果您需要通过索引号检索它,那么如果在表中的任何位置插入新列,使用*可能会在以后造成很大的问题,因为从那点开始的所有索引都会增加一个...

为什么要指定所需的列?

在MySQL中,使用SELECT语句可以检索表中的数据。当我们使用SELECT * FROM table_name时,我们将检索表中的所有列。然而,最好指定我们实际需要的列。这样做的原因有两个。

首先,如果我们的编程语言支持关联列表/数组,我们可以通过列名来访问检索到的数据。这样,我们可以更方便地处理和操作数据。

其次,如果我们使用*来检索所有列,并且在表中的任何位置插入新列,那么后续的索引将全部增加一个。这可能会导致代码中的错误,因为代码中的索引与实际表结构不再匹配。因此,为了避免这种问题,最好明确指定所需的列。

解决方法:

为了解决这个问题,我们应该始终指定所需的列。例如,如果我们只需要检索表中的"column1"和"column2",则应该使用SELECT column1, column2 FROM table_name。这样可以确保我们只获取所需的数据,并避免后续插入新列时的问题。

在使用MySQL进行查询时,最好指定所需的列,以便能够更方便地处理和操作数据,并避免后续插入新列时的问题。通过明确指定所需的列,我们可以更好地控制代码的稳定性和可维护性。

0
0 Comments

使用*时要考虑到表中可能会添加更多的字段。

如果有很多更多的字段,你可能会获取和返回比你实际需要的更多的数据。

可能会出现一些新字段的问题。例如,如果你只是循环遍历字段并显示它们,你可能会有一些不想显示的新字段。或者数据类型可能需要一些格式化处理。

还有一种可能就是一个字段会从表中删除,例如在规范化表时。在这种情况下,期望特定字段的代码可能会出错。

出现这个问题的原因是可能会有更多的字段被添加到表中,而使用*时会获取所有字段的数据。这可能会导致获取和返回比实际需要的更多的数据。另外,新字段可能会带来一些问题,比如不想显示的字段或者需要进行格式化处理的数据类型。此外,如果表中的字段被删除,那些期望特定字段的代码可能会出错。

解决这个问题的方法是使用具体的字段名来替代*。通过明确指定需要的字段,可以避免获取和返回不必要的数据。另外,可以根据需要对数据进行格式化处理。如果表中的字段发生变化,也可以相应地更新代码以适应新的字段。

以下是一个示例代码,展示了如何使用具体的字段名来调用mysql中的字段:

SELECT field1, field2, field3 FROM table_name;

通过使用具体的字段名,可以确保只获取所需的字段数据,并且可以更好地处理字段变化的情况。

0
0 Comments

在使用MySQL进行查询时,使用*语法可能会导致性能下降,原因如下:

1. 不是所有的字段都被索引,查询使用了全表扫描。但是很少可能所有要返回的字段都只有一个索引。

2. 从包含可变长度列的表中返回尾部字段可能会导致轻微的搜索开销:为了返回第20个字段,需要检查前面的19个字段并计算偏移量。

3. 需要返回更多的数据(通过连接传输)。

由于需要几乎所有的字段,最后一个原因可能是最重要的原因。比如,description TEXT字段可能只是页面上不使用的50个字段中的一个,但它可能占据的空间是其他字段的10倍。

在这种情况下,最好的做法是命名所有的字段并省略不需要的长字段。

但是如果需要查询表中的所有字段呢?

那么当然应该选择全部字段。MySQL会在内部将*扩展为完整的字段列表,性能不会有任何差异。

关于你提到的第一个观点,我不太明白一个选择表达式,也就是*,如何影响索引的使用。据我理解,如果WHERE条件使用了索引属性,那么相应的索引将被用于查找满足条件的记录。在定位到记录之后,关系型数据库管理系统(RDBMS)将加载选择表达式所需的属性。从这个角度来看,索引的使用不应该取决于加载的属性集。

如果你选择的所有字段(包括过滤条件)都包含在索引中,那么RDBMS就不需要在表本身中查找这些字段。

解决方法就是,尽量避免使用*语法,而是明确列出需要查询的字段,这样可以提高查询性能。

0