先说结论
在数据库查询中,SELECT
语句用于从数据库表中检索数据。SELECT (1)
、SELECT (*)
和SELECT (column)
之间的差异主要在于它们返回的数据类型和范围:
SELECT (1)
:SELECT (*)
:SELECT (column)
:我们新建一个表user2,该表没有索引哦。
drop table user2;CREATE TABLE `user2` ( `id` bigint COMMENT '主键', `name` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT '' COMMENT '账号') ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='用户表';
继续插入有效数据和空数据
INSERT INTO user2(id, name)values(1, '111');
INSERT INTO user2(id, name)values(null, null);
我们验证下sql:
SELECT 1 from user2;SELECT * from user2;SELECT count(1) from user2;SELECT count(*) from user2;SELECT count(id) from user2;
select(1)、select(*)的效果其实一样,都是完成对全表扫描之后,再进行数据统计,甚至包括了NULL行。
SELECT count(id) 则是会过滤掉NULL行。
select(1)、select(*)则不会走索引。
SELECT count(id) 如果id列有索引,则会走聚簇索引来统计所有行列表,并排除NULL行。
ALTER table user2add key(`id`);
在实际应用中,选择哪种类型的SELECT
语句取决于你的具体需求。
SELECT (1)
。SELECT (*)
。SELECT (column)
来提高效率,并辅助索引。此外,SELECT (1)
和SELECT (*)
在某些数据库系统(MyIsam)中可能会被优化以使用索引或直接从元数据中获取信息,这取决于数据库的实现和查询优化器的策略。
而SELECT (column)
通常会直接访问表中的数据,除非该列上有索引;尤其是在支持多事务的InnoDB里。
在设计查询时,应该考虑到性能和资源消耗,特别是在处理大型数据库时。选择性地检索数据可以显著减少网络传输的数据量,加快查询速度,并减少对数据库服务器的压力。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。