select效率问题

来源:百度知道 编辑:UC知道 时间:2024/05/18 09:49:57
一直以来,听到的都是select的时候,尽量写列名而不要用select *, 因为后者效率要比前者低,但是今天用100万条数据做了一个测试:

select * from user

select id, name, password, email from user

个执行3次,结果查询所用的时间相差都在几毫秒之间,可以忽略不计。
难道说以前学到的知识有错误?
各位的回答我有点头绪了,补充一点:
我并没有任何where条件限制。

根据各位的回答,总结一下,是不是就是说:

如果我需要查询表里的所有字段,其实是可以用*代替的。
只有需要用差部分的时候,比如说20个字段,我只需要3个5个的时候,还是用部分的好。

列总数和你搜的这几列的数目应该差不多导制的嘛,
前者是要低点,你可以试下select id from user
再看效果

不止是效率问题,效率肯定是低,你用了*就无法使用索引了。

而且你第第一条语句如果在程序扩展的时候,非常容易导致崩溃。

比如,多加了一个字段,可能就报废了。。。

对的..查询是基本无差别的~~

但是查出来的数据基本-0~因为你查到数据后需要读取..然后处理数据~~

你读取的时候..假设你有5个字段...10条记录...而每个字段所占用的内存空间相同..那么你需要读取50段数据~~如果只查询2个字段..你就少占用了30段数据的空间~

是否使用 * 是根据实际情况来定的,字段的类型和字段的多少及机器的配置都有影响的。
抛开机器问题不谈,* 有20个字段,你只选择其中几个,查询的速度应该有明显差距的,如果 * 字段中有text之类的字段,你在查询的时候不选择,速度应该也有明显的差距。
还有你是否使用条件语句,限制输出的记录数。

因为你表里没索引 走的全表扫描 自然速度一样 而且根本没where条件就算是有索引速度也是一样的 都执行了全表扫描 没有具体的where条件 单列和*的效率基本是一样的 之前说的*慢是因为容易把索引给屏蔽了走全表扫描 而如果where里用到了索引就不用全表索引了 你可以看看oralce的执行计划就明白了