Select*一定不走索引是否正确?
走索引指的是:SQL语句的执行计划用到了1、聚集索引查找 2、索引查找 ,并且查询语句中需要有where子句 根据where子句的过滤条件,去聚集索引或非聚集索引那里查找记录 一张表只有一列的情况: 聚集索引 USE [tempdb] GO CREATE TABLE t1 ( id INT ) GO CREA
走索引指的是:SQL语句的执行计划用到了1、聚集索引查找 2、索引查找 ,并且查询语句中需要有where子句
根据where子句的过滤条件,去聚集索引或非聚集索引那里查找记录
一张表只有一列的情况:
聚集索引

USE [tempdb] GO CREATE TABLE t1 ( id INT ) GO CREATE CLUSTERED INDEX CIX_T1 ON [dbo].[t1](ID ASC) GO DECLARE @I INT SET @I = 1 WHILE @I < 1000 BEGIN INSERT INTO [dbo].[t1] ( [id] ) SELECT @I SET @I = @I + 1 END SELECT * FROM [dbo].[t1] WHERE [id]=20
非聚集索引

USE [tempdb] GO CREATE TABLE t2 ( id INT ) GO CREATE NONCLUSTERED INDEX IX_T2 ON [dbo].[t2](ID ASC) GO DECLARE @I INT SET @I = 1 WHILE @I < 1000 BEGIN INSERT INTO [dbo].[t2] ( [id] ) SELECT @I SET @I = @I + 1 END SELECT * FROM [dbo].[t2] WHERE [id]=20
只有一列,肯定会走索引的
一张表有多列的情况
分三种情况:
1、只有聚集索引
2、只有非聚集索引
3、有聚集索引和非聚集索引
只有聚集索引

--只有聚集索引 USE [tempdb] GO CREATE TABLE Department ( DepartmentID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, Name NVARCHAR(200) NOT NULL , GroupName NVARCHAR(200) NOT NULL , Company NVARCHAR(300) , ModifiedDate DATETIME NOT NULL DEFAULT ( GETDATE() ) ) DECLARE @i INT SET @i=1 WHILE @i < 100000 BEGIN INSERT INTO Department ( name, [Company], groupname ) VALUES ( '销售部'+CAST(@i AS VARCHAR(200)), '中国你好有限公司XX分公司', '销售组' ) SET @i = @i + 1 END SELECT * FROM [dbo].[Department] WHERE [DepartmentID]=2
小结:
只有聚集索引的表:如果where后面不包括创建聚集索引的时候的第一个字段,就会使用聚集索引扫描
下面SQL语句会使用聚集索引查找,因为包括了创建聚集索引的时候的第一个字段
SELECT * FROM [dbo].[Department] WHERE [Company]='销售部12' AND [DepartmentID]=12
只有非聚集索引

--只有非聚集索引 USE [tempdb] GO CREATE TABLE Department ( DepartmentID INT IDENTITY(1, 1) NOT NULL , Name NVARCHAR(200) NOT NULL , GroupName NVARCHAR(200) NOT NULL , Company NVARCHAR(300) , ModifiedDate DATETIME NOT NULL DEFAULT ( GETDATE() ) ) CREATE NONCLUSTERED INDEX IX_Department ON Department(DepartmentID ASC) DECLARE @i INT SET @i=1 WHILE @i < 100000 BEGIN INSERT INTO Department ( name, [Company], groupname ) VALUES ( '销售部'+CAST(@i AS VARCHAR(200)), '中国你好有限公司XX分公司', '销售组' ) SET @i = @i + 1 END SELECT * FROM [dbo].[Department] WHERE [Company]='销售部12' AND [DepartmentID]=12
小结:
只有非聚集索引的表:如果where后面不包括创建非聚集索引的时候的第一个字段,就会使用表扫描或者索引扫描
下面SQL语句会使用非聚集索引查找,因为包括了创建非聚集索引的时候的第一个字段
SELECT * FROM [dbo].[Department] WHERE [Company]='销售部12' AND [DepartmentID]=12
有聚集索引也有非聚集索引



--有聚集索引和非聚集索引 USE [tempdb] GO CREATE TABLE Department ( DepartmentID INT IDENTITY(1, 1) NOT NULL PRIMARY KEY, Name NVARCHAR(200) NOT NULL , GroupName NVARCHAR(200) NOT NULL , Company NVARCHAR(300) , ModifiedDate DATETIME NOT NULL DEFAULT ( GETDATE() ) ) CREATE NONCLUSTERED INDEX IX_Department ON Department(Company ASC) DECLARE @i INT SET @i=1 WHILE @i < 100000 BEGIN INSERT INTO Department ( name, [Company], groupname ) VALUES ( '销售部'+CAST(@i AS VARCHAR(200)), '中国你好有限公司XX分公司', '销售组' ) SET @i = @i + 1 END
小结:
有聚集索引和非聚集索引的表:如果where后面包括创建聚集索引的时候的第一个字段,就会使用聚集索引查找
如果where后面包括创建非聚集索引的时候的第一个字段但不包括创建聚集索引的时候的第一个字段,就会使用索引查找
如果where后面不包括创建非聚集索引的时候的第一个字段和不包括创建聚集索引的时候的第一个字段,就会使用聚集索引扫描
1 SELECT * FROM [dbo].[Department] WHERE [GroupName]='销售组'
总结
其实走不走索引,关键取决于where后面包括还是不包括
创建聚集索引的时候的第一个字段
创建非聚集索引的时候的第一个字段
跟select *没有关系的,select * 最大的影响就是额外的IO开销
像“键查找” ,“RID查找”这些运算符就是额外的开销
键查找:到聚集索引里找其他字段的值
RID查找:到堆表里找其他字段的值

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Oracle インデックス タイプには次のものがあります: 1. B ツリー インデックス、2. ビットマップ インデックス、3. 関数インデックス、4. ハッシュ インデックス、5. 逆キー インデックス、6. ローカル インデックス、7. グローバル インデックス、8. ドメイン インデックス、9.ビットマップ接続インデックス、10. 複合インデックス。詳細な紹介: 1. B ツリー インデックスは、同時操作を効率的にサポートできる自己分散ツリー データ構造です。Oracle データベースでは、B ツリー インデックスが最も一般的に使用されるインデックス タイプです。2. ビット グラフ インデックスは、インデックス タイプ ベースです。ビットマップアルゴリズムなどについて。

golang を使用した SelectChannelsGo 同時プログラミングの非同期処理方法 はじめに: 同時プログラミングは、アプリケーションのパフォーマンスと応答性を効果的に向上させることができる、現代のソフトウェア開発における重要な領域です。 Go 言語では、Channel と Select ステートメントを使用して同時プログラミングを簡単かつ効率的に実装できます。この記事では、SelectChannelsGo 同時プログラミングの非同期処理メソッドに golang を使用する方法を紹介し、具体的な方法を提供します。

jQuery は、DOM 操作、イベント処理、アニメーション効果などを簡素化するために使用できる人気のある JavaScript ライブラリです。 Web 開発では、選択した要素のイベント バインディングを変更する必要がある状況によく遭遇します。この記事では、jQuery を使用して選択要素変更イベントをバインドする方法を紹介し、具体的なコード例を示します。まず、ラベルを使用してオプションを含むドロップダウン メニューを作成する必要があります。

解決策は次のとおりです。 1. インデックス値が正しいかどうかを確認します。まず、インデックス値が配列の長さの範囲を超えていないかどうかを確認します。配列のインデックスは 0 から始まるため、インデックスの最大値は配列の長さから 1 を引いた値になります。 2. ループ境界条件を確認します。ループ内で配列アクセスにインデックスを使用する場合は、ループ境界条件が正しいことを確認してください。 ; 3. 配列の初期化: 配列を使用する前に、配列が正しく初期化されていることを確認してください; 4. 例外処理の使用: プログラム内で例外処理メカニズムを使用して、インデックスが配列の境界を超えるエラーをキャッチできます。 、それに応じて処理してください。

インデックスを使用して、PHP および MySQL でのデータのグループ化とデータ集約の効率を向上させるにはどうすればよいでしょうか?はじめに: PHP と MySQL は現在最も広く使用されているプログラミング言語およびデータベース管理システムであり、Web アプリケーションの構築や大量のデータの処理によく使用されます。データのグループ化とデータの集計は、大量のデータを処理する際の一般的な操作ですが、インデックスが適切に設計および使用されていない場合、これらの操作は非常に非効率になる可能性があります。この記事では、PHP と MySQL でのデータのグループ化と集計の効率を向上させ、パフォーマンスを向上させるためのインデックスの使用方法を紹介します。

この記事では、PHP がどのようにして、別の文字列内の文字列の開始位置から終了位置まで文字列を返すかを詳しく説明します。非常に実用的であると編集者が考えたので、参考として共有します。この記事. この記事から何かを得ることができます。 PHP で substr() 関数を使用して、文字列から部分文字列を抽出します。substr() 関数は、文字列から指定された範囲内の文字を抽出できます。構文は次のとおりです。 substr(string,start,length) ここで、 string: 部分文字列が抽出される元の文字列。 start: 部分文字列の開始位置のインデックス (0 から始まります)。 length (オプション): 部分文字列の長さ。指定されていない場合は、

Python でのスライスの基本構文は、スライス操作に [start:end:step] 構文を使用することです。ここで、start はスライスの開始位置を表し、end はスライスの終了位置を表し、step はスライス ステップを表します。 start が省略された場合、リストまたは文字列の先頭からスライスされることを意味します。end が省略された場合、リストまたは文字列の最後までスライスされることを意味します。step が省略された場合、ステップ サイズが 1 であることを意味します。例: my_list=[1,2,3,4,5]#2番目の要素から4番目の要素までをカット(4番目の要素を除く) sub_list=my_list[1:4]#[2,3,4 ]#Start最初の要素からリストの終わりまで sub_li

Bluetooth ヘッドセットは、現代人の日常生活に欠かせないデバイスの 1 つであり、ワイヤレス接続とポータブルなデザインにより、音楽、通話、スポーツを楽しむ際に、より自由で便利な体験を楽しむことができます。ただし、Bluetooth ヘッドセットを使用するときに多くの人がよく疑問に思うのが、Bluetooth ヘッドセットのパフォーマンスと寿命を確保するために Bluetooth ヘッドセットを正しく充電する方法です。ここではBluetoothヘッドセットの正しい充電方法を詳しく紹介していきます。まず、適切な充電アダプターとケーブルを選択することが重要です。 Bluetooth ヘッドセットには通常、充電機能を備えた充電ボックスが付属しています。
