Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.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选择效率_Mysql_Select_Performance - Fatal编程技术网

MySQL选择效率

MySQL选择效率,mysql,select,performance,Mysql,Select,Performance,我正在使用PHP与MySQL数据库交互,我想知道使用“SELECT*FROM…”查询MySQL是否比使用“SELECT id FROM…”更高效。效率更低 仔细想想,SQL将为您选择的每一行发送所有数据 假设您有一个名为MassiveTextBlock的列—当您选择*时,该列将包含在内,因此SQL必须在您可能不需要它的时候发送所有数据。相比之下,selectid只是获取一组数字。效率较低 仔细想想,SQL将为您选择的每一行发送所有数据 假设您有一个名为MassiveTextBlock的列—当您选

我正在使用PHP与MySQL数据库交互,我想知道使用“SELECT*FROM…”查询MySQL是否比使用“SELECT id FROM…”更高效。

效率更低

仔细想想,SQL将为您选择的每一行发送所有数据

假设您有一个名为
MassiveTextBlock
的列—当您
选择*
时,该列将包含在内,因此SQL必须在您可能不需要它的时候发送所有数据。相比之下,
selectid
只是获取一组数字。

效率较低

仔细想想,SQL将为您选择的每一行发送所有数据


假设您有一个名为
MassiveTextBlock
的列—当您
选择*
时,该列将包含在内,因此SQL必须在您可能不需要它的时候发送所有数据。相比之下,
SELECT id
只是获取一组数字。

效率较低,因为您获取的信息比SELECT id多得多。此外,第二个问题很可能只使用索引来解决。

效率较低,因为您获取的信息比选择id要多得多。此外,第二个问题很可能只使用索引来解决。

这取决于您选择数据的原因。如果您正在编写像phpMySQL这样的原始数据库接口,那么它可能是有意义的

如果您使用相同的条件和串联操作对同一个表执行多个查询,则使用
从表中选择col1、col2
可能比使用两个独立的
从表中选择col1
从表中选择col2
来获取相同数据的不同部分更有意义,因为这将在同一查询中执行两个操作

但是,一般来说,您应该只从表中选择所需的列,以尽量减少DBMS挖掘不必要的数据。如果您的数据库与客户机服务器位于不同的服务器上,或者您的数据库服务器很旧和/或速度较慢,那么这种方法的好处将大大增加


在任何情况下,
SELECT*
都是不可避免的,但如果不可避免,那么您的数据模型可能存在一些严重的设计缺陷。

这取决于您选择数据的原因。如果您正在编写像phpMySQL这样的原始数据库接口,那么它可能是有意义的

如果您使用相同的条件和串联操作对同一个表执行多个查询,则使用
从表中选择col1、col2
可能比使用两个独立的
从表中选择col1
从表中选择col2
来获取相同数据的不同部分更有意义,因为这将在同一查询中执行两个操作

但是,一般来说,您应该只从表中选择所需的列,以尽量减少DBMS挖掘不必要的数据。如果您的数据库与客户机服务器位于不同的服务器上,或者您的数据库服务器很旧和/或速度较慢,那么这种方法的好处将大大增加


在任何情况下,
SELECT*
都是不可避免的,但如果不可避免,那么您的数据模型可能存在一些严重的设计缺陷。

这取决于您的索引

如果只选择MySQL用于获取结果的索引中存在的列,则选择较少的列有时可以节省大量时间

例如,如果您在列
id
上有一个索引,并执行此查询:

SELECT id FROM mytable WHERE id>5
那么MySQL只需要读取索引,甚至不需要读取表行。另一方面,如果选择其他列,如:

SELECT id, name FROM mytable WHERE id>5
然后MySQL需要从索引中读取id,然后转到表行读取名称列


但是,如果您正在读取不在您选择的索引中的列,那么读取更多的列实际上不会产生太大的差异,尽管它会产生很小的差异。如果某些列包含大量数据,例如大文本或BLOB列,那么如果您不需要它们,最好将它们排除在外。

这取决于您的索引

如果只选择MySQL用于获取结果的索引中存在的列,则选择较少的列有时可以节省大量时间

例如,如果您在列
id
上有一个索引,并执行此查询:

SELECT id FROM mytable WHERE id>5
那么MySQL只需要读取索引,甚至不需要读取表行。另一方面,如果选择其他列,如:

SELECT id, name FROM mytable WHERE id>5
然后MySQL需要从索引中读取id,然后转到表行读取名称列


但是,如果您正在读取不在您选择的索引中的列,那么读取更多的列实际上不会产生太大的差异,尽管它会产生很小的差异。如果某些列包含大量数据,例如大文本或BLOB列,那么如果您不需要它们,最好将它们排除在外。

好的,我不知道发送信息是否比排序和选择正确的行更吸引人。谢谢。@Graphain:我们还应该记住,提出此类问题的人对性能一无所知,甚至选择id(而不是*)也无助于在索引较少的表中以及类似“%bla%”条件下提高性能;-)@虫族:不确定这与@Graphain的答案有什么关系。>>而不是排序和选择正确的行。-什么是“对”?对谁说“对”?数据库不知道您需要哪些列。@musicfreak:这是对他的好答案的补充,新手不应该考虑像SELECT*;-)这样的“无关紧要的”性能问题好吧,我不知道它发送信息是否比s更吸引人