SqlServer基础--Select *与Select 指定列的区别

select * from table

  • 有聚集索引:聚集索引扫描
  • 没有聚集索引 :表扫描
select 所有的列名 from talbe

  • 有聚集索引:聚集索引扫描
  • 没有聚集索引 :表扫描
select 索引中的列名  from talbe

  • 指定索引的扫描

以文本的展示执行计划
SET SHOWPLAN_TEXT ON
GO

测试Sql 语句

CREATE DATABASE Test6;
GO
USE Test6;
GO
Create table BusinessInfoTable
(
    BuniessCode1 varchar(50),
    BuniessCode2 varchar(50),
    BuniessCode3 varchar(50),
    BuniessCode4 varchar(50),
    BuniessStatus1 tinyint,
    BuniessStatus2 tinyint,
    BuniessDateTime1 Datetime,
    BuniessDateTime2 Datetime,
    OtherColumn1 varchar(50),
    OtherColumn2 varchar(50),
    OtherColumn3 varchar(50)
)

declare @i int=0
while @i<1000000
begin
    insert into BusinessInfoTable
    values
    (
        NEWID(),NEWID(),NEWID(),NEWID(),RAND()100,RAND()100,
        DATEADD(MI,@i,GETDATE()),DATEADD(MI,@i,GETDATE()),NEWID(),NEWID(),NEWID()
    )
    set @i=@i+1
end

CREATE NONCLUSTERED INDEX IDX_1 ON BusinessInfoTable
(BuniessStatus1,BuniessStatus2,BuniessDateTime1,BuniessDateTime2)
INCLUDE(OtherColumn2)
--或者这样,只是索引前导列顺序不一样
CREATE NONCLUSTERED INDEX IDX_2 ON BusinessInfoTable
(BuniessDateTime1,BuniessDateTime2,BuniessStatus1,BuniessStatus2)

  1. 如果没聚集索引

    ● 显示所有列

    USE [Test6]
    GO
    SELECT top 10
      [BuniessCode1]
      ,[BuniessCode2]
      ,[BuniessCode3]
      ,[BuniessCode4]
      ,[BuniessStatus1]
      ,[BuniessStatus2]
      ,[BuniessDateTime1]
      ,[BuniessDateTime2]
      ,[OtherColumn1]
      ,[OtherColumn2]
      ,[OtherColumn3]
    FROM [dbo].[BusinessInfoTable]
    GO
    

SELECT top 10 *
FROM [dbo].[BusinessInfoTable]
GO



  ● 索引中的列

```js
SELECT top 10
     BuniessStatus1,BuniessStatus2,BuniessDateTime1,BuniessDateTime2
      ,[OtherColumn2]
  FROM [dbo].[BusinessInfoTable]
GO

SELECT top 10 *
  FROM [dbo].[BusinessInfoTable]
GO

  1. 聚集索引
    创建聚集索引:
    ```js
    CREATE CLUSTERED INDEX IDX_3 ON BusinessInfoTable
    (BuniessCode1)

  ● 显示所有列
```js
USE [Test6]
GO
SET SHOWPLAN_TEXT ON
GO

SELECT top 10
      [BuniessCode1]
      ,[BuniessCode2]
      ,[BuniessCode3]
      ,[BuniessCode4]
      ,[BuniessStatus1]
      ,[BuniessStatus2]
      ,[BuniessDateTime1]
      ,[BuniessDateTime2]
      ,[OtherColumn1]
      ,[OtherColumn2]
      ,[OtherColumn3]
  FROM [dbo].[BusinessInfoTable]
GO

SELECT top 10 *
  FROM [dbo].[BusinessInfoTable]
GO

● 索引中的列

SELECT top 10
     BuniessStatus1,BuniessStatus2,BuniessDateTime1,BuniessDateTime2
      ,[OtherColumn2]
  FROM [dbo].[BusinessInfoTable]
GO

SELECT top 10 *
  FROM [dbo].[BusinessInfoTable]
GO

时间: 2024-07-30 14:56:39

SqlServer基础--Select *与Select 指定列的区别的相关文章

MS SQL基础教程:SELECT语句的应用

从本节开始,我们将用大量的实例来讲述SELECT 语句的应用.首先从最简单也是最常用的单表查询开始. 10.2.1 选择列 (1) 用SELECT 子句来指定查询所需的列,多个列之间用逗号分开 (2) 可以使用符号"*"来选取表的全部列 (3) 在查询结果中添加列 10.2.2 选择行 (1) 使用WHERE 子句 用户在查询数据库时,往往并不需要了解全部信息,而只需要其中一部分满足某些条件的信息.在这种情况下就需要在SELECT 语句中加入条件,以选择数据行,这时就用到WHERE 子

[c#基础]DataTable的Select方法

引言 可以说DataTable存放数据的一个离线数据库,将数据一下加载到内存,而DataReader是在线查询,而且只进形式的查询,如果后退一步,就不可能了,DataTable操作非常方便,但也有缺点,数据量非常大的时候,一下加载到内存,可想而知会有多么的卡了.这里只是说明DataTable的select()方法,具体项目根据需求,可以自己选择. Select 既然DataTable是一下从数据库中拿数据,肯定提供了更方便的筛选方法,然后就找了一下,觉得Select能满足日常的筛选工作,做了一个

Innodb:RR隔离级别下insert...select 对select表加锁模型和死锁案列

最近有网友遇到了在RR隔离级别下insert A select B where B.COL=** 由于select表也就是B表引发的死锁的问题.分析死锁日志后,笔者进行模拟重现了这位网友遇到了2种场景并且在本文中进行详细的描述. 本文使用版本percona 5.7.14修改版,能够打印出事务所有的行锁信息结构链(不包含隐含锁) 本文中的测试是在RR隔离级别下完成的,RC不存在这样的问题 笔者对源码的理解有限,如有错误请指正 本文使用了自制工具innblock和bcview,前者用于扫描块结构后者

使用jqMobi开发app基础之下拉select

jqMobi有一个专门处理select的插件af.selectBox.js,感觉很简单很简单,官方文档只是简单demo,没有详细说明. 简单的列子: <select id="test" style="-webkit-appearance: listbox;"> <option value="1">One</option> <option value="2">Two</opt

PHP将MYSQL内容读到二维数组并按指定列输出

PHP将MYSQL内容读到二维数组并按指定列输出 <? $host = "localhost";   //主机名 $user = "root";        //mysql用户名 $password = "";    //mysql密码 $database = "doc";  //mysql数据库名 $tables = "mclass";  //表名 $conn=mysql_connect(&quo

Oracle判断指定列是否全部为数字的sql语句

判断指定列是否全部为数字在实际应用过程中很常见,下面是具体的示例语句,由此需求的朋友可以借鉴下,希望对大家有所帮助   复制代码 代码如下: select nvl2(translate(name,'1234567890 ', ''),'is characters ','is number ') from customer_info where nvl2(translate(name,'1234567890 ', ''),'is characters ','is number ')='is num

SQLServer基础语法实例应用(一)

  1.说明:创建数据库 ? 1 CREATE DATABASE database-name 2.说明:删除数据库 ? 1 DROP  DATABASE database-name  3.说明:备份数据库 ? 1 2 3 4 5 USE master -- 创建 备份数据的 device EXEC sp_addumpdevice 'disk', 'cc_jz', 'd:cc_jz.dat' -- 开始 备份 BACKUP DATABASE cc_jz TO cc_jz 4.说明:创建新表 ? 1

asp.net DataTable相关操作集锦(筛选,取前N条数据,去重复行,获取指定列数据等)_实用技巧

本文实例总结了asp.net DataTable相关操作.分享给大家供大家参考,具体如下: #region DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回 /// <summary> /// DataTable筛选,排序返回符合条件行组成的新DataTable或直接用DefaultView按条件返回 /// eg:SortExprDataTable(dt,"Sex='男'","Time Desc&quo

SqlServer 基础知识 数据检索、查询排序语句_MsSql

复制代码 代码如下: --执行顺序 From Where Select select * from (select sal as salary,comm as commission from emp ) x where salary<5000 --得出 Name Work as a Job select ename +' Work as a'+job as msg from emp where deptno=10 --如果员工工资小于2000返回UnderPaid 大于等于4k 返回OverPa