Select子句中要不要使用*(星号)?

        除了很少数的例外,在绝大多数情况下,使用星号是一种糟糕的编程习惯。 在此还是建议你即使需要被査询表的所有列,也应该显式地指定它们。之所以要这么做, 原因有很多。不像关系模型,SQL会根据在语句中指定的列顺序来保持列的原始位置。通过制定SELECT *,就可以确保查询返冋的列是按照它们的原始位置来返回它们。而客户端应用程序可能通过列的原始位置,而不是名称来引用査询结果出的各列(这确实真不是一种好习惯)。如果表的架构定义有了任何变化(例如,增加或删除了某些列,重新调整了列的顺序,等等),这样就可能导致客户端应用程序运行失败,甚至产生无法注意到的逻辑错误。通过在査询语句中明确指定需要的列,那么只要 某个列在表中存在,就总可以在结果中得到正确的列。如果査询引用的列在表中已经被 删除,结果就得到一个执行错误,这样就能够对代码进行相应的修改。有些人可能会问, 用星号和显式地指定列名在性能上是否有什么不同

        当使用星号时,为了解析列名需要付出一些额外的代价,但与査询过程中无法觉察到的代价相比,这一代价通常可以忽略。即使它们的性能有所不同,差别也是微不足道的, 所以应该尽可能显式地列出列名。无论如何,显式地列出需要的列名是一种值得推荐的实践方法,对SQL代码编写和SELECT列名解析都是一种双贏的策略。

猜你喜欢

转载自blog.csdn.net/xc917563264/article/details/80885099