Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从SQL语句中选择特定值是否比使用;选择*”;_Mysql_Sql - Fatal编程技术网

Mysql 从SQL语句中选择特定值是否比使用;选择*”;

Mysql 从SQL语句中选择特定值是否比使用;选择*”;,mysql,sql,Mysql,Sql,这个问题刚刚出现在我的脑海中,我无法回答 假设您正在为网站开发新闻页面。在表中,您将有以下字段: ID、标题、主题、内容、时间、作者、关键字 在用户将看到的实际页面上,您可能只希望显示以下内容: 标题、内容、关键字 现在,当您要编写SQL语句时,是否最好这样编写: SELECT Title, Content, Keywords FROM newstable; 或者说: SELECT * FROM newstable; 我一直认为使用前一个例子会更有效、更快。但是,我现在想,只使用SELECT

这个问题刚刚出现在我的脑海中,我无法回答

假设您正在为网站开发新闻页面。在表中,您将有以下字段:

ID、标题、主题、内容、时间、作者、关键字

在用户将看到的实际页面上,您可能只希望显示以下内容:

标题、内容、关键字

现在,当您要编写SQL语句时,是否最好这样编写:

SELECT Title, Content, Keywords FROM newstable;
或者说:

SELECT * FROM newstable;
我一直认为使用前一个例子会更有效、更快。但是,我现在想,只使用SELECTALL语句可能会更快更容易


无论哪种方式都是正确的,还是它们的书写方式真的很重要?

是的,这关系到性能和其他原因

  • 当您仅选择所需的列时,必须返回较少的数据。这意味着将其从硬盘上拔出并通过线路发送的时间更少
  • 您选择的列可能会完全满足使用a的要求,这可以使查询速度快很多倍
  • 通过指定列名,可以记录代码中使用的数据。这在您回来进行维护时非常有用
  • 如果不使用*,则在重命名、添加或删除列时,代码不会中断。如果列名是显式的,那么将得到一个查询执行时错误,而不是盲目地将新结果传递给代码,谁知道会发生什么

是的,这对性能很重要。另外,可读性更好,这样您就可以准确地知道您请求的数据


您应该指定所需的数据列,如果您不需要所有数据列,那么为什么要拉它们呢。您只会返回不必要的数据

我建议最好的做法是显式写出列

首先,这将最大限度地减少仅返回到您要求的内容的数据量

接下来,如果有人向数据库中添加列,它将删除可能的回归错误

而且,它不需要很多时间


最后,您几乎可以肯定会有一个order by子句,这可以通过仅来自索引的数据来满足。

除了性能原因(返回的结果集较小,并且可能仅检索索引),按指定顺序将已知数量的命名列返回到应用程序代码中,使该代码更加健壮-您不会意外地对表的当前定义编写任何依赖项。

I had:with select*,服务器必须进入其内部数据库才能找到表结构,除了red filter的回答:在InnoDB中,如果只选择索引字段,MySQL将从索引中获取值,而不会读取实际的表。这称为
覆盖索引
,将大大加快您的选择速度。该注释是在添加链接之前作出的。@remi,如果您明确指定字段,服务器还必须进入内部数据库,以检查您的指定是否正确。这没有什么区别,而且在第一次运行之后,查询计划会被缓存,并且没有更多的准备时间。这取决于dbms,我认为,对于sql server,如果添加select*(据我所知),它会做更多的工作