Maison base de données tutoriel mysql Select*一定不走索引是否正确?

Select*一定不走索引是否正确?

Jun 07, 2016 pm 04:06 PM
select correct 索引

走索引指的是: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 &#43; 1
     END

 SELECT * FROM [dbo].[t1] WHERE [id]=20
Copier après la connexion
View Code

\

非聚集索引

\
 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 &#43; 1
     END

 SELECT * FROM [dbo].[t2] WHERE [id]=20
Copier après la connexion
View Code

\

只有一列,肯定会走索引的


一张表有多列的情况

分三种情况:

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  ( '销售部'&#43;CAST(@i AS VARCHAR(200)), '中国你好有限公司XX分公司', '销售组' )
         SET @i = @i &#43; 1
     END


 SELECT * FROM [dbo].[Department] WHERE [DepartmentID]=2
Copier après la connexion
View Code

\

\

小结:

只有聚集索引的表:如果where后面不包括创建聚集索引的时候的第一个字段,就会使用聚集索引扫描

下面SQL语句会使用聚集索引查找,因为包括了创建聚集索引的时候的第一个字段

 SELECT * FROM [dbo].[Department] WHERE [Company]='销售部12' AND [DepartmentID]=12
Copier après la connexion
Copier après la connexion

只有非聚集索引

\
 --只有非聚集索引
 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  ( '销售部'&#43;CAST(@i AS VARCHAR(200)), '中国你好有限公司XX分公司', '销售组' )
         SET @i = @i &#43; 1
     END
 
SELECT * FROM [dbo].[Department] WHERE [Company]='销售部12' AND [DepartmentID]=12
Copier après la connexion
View Code

\

\

小结:

只有非聚集索引的表:如果where后面不包括创建非聚集索引的时候的第一个字段,就会使用表扫描或者索引扫描

下面SQL语句会使用非聚集索引查找,因为包括了创建非聚集索引的时候的第一个字段

 SELECT * FROM [dbo].[Department] WHERE [Company]='销售部12' AND [DepartmentID]=12
Copier après la connexion
Copier après la connexion


有聚集索引也有非聚集索引

\\ 复制代码
 --有聚集索引和非聚集索引
 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  ( '销售部'&#43;CAST(@i AS VARCHAR(200)), '中国你好有限公司XX分公司', '销售组' )
         SET @i = @i &#43; 1
     END
Copier après la connexion
View Code

\

\

\

小结:

有聚集索引和非聚集索引的表:如果where后面包括创建聚集索引的时候的第一个字段,就会使用聚集索引查找

如果where后面包括创建非聚集索引的时候的第一个字段但不包括创建聚集索引的时候的第一个字段,就会使用索引查找

如果where后面不包括创建非聚集索引的时候的第一个字段和不包括创建聚集索引的时候的第一个字段,就会使用聚集索引扫描

1 SELECT * FROM [dbo].[Department] WHERE [GroupName]='销售组'
Copier après la connexion

\


总结

其实走不走索引,关键取决于where后面包括还是不包括

创建聚集索引的时候的第一个字段

创建非聚集索引的时候的第一个字段

跟select *没有关系的,select * 最大的影响就是额外的IO开销

像“键查找” ,“RID查找”这些运算符就是额外的开销

键查找:到聚集索引里找其他字段的值

RID查找:到堆表里找其他字段的值

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
1 Il y a quelques mois By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quels sont les types d'index Oracle ? Quels sont les types d'index Oracle ? Nov 16, 2023 am 09:59 AM

Les types d'index Oracle incluent : 1. Index B-Tree ; 2. Index Bitmap ; 3. Index de fonction ; 5. Index de clé inversée ; Index de connexion bitmap ; 10. Index composite. Introduction détaillée : 1. L'index B-Tree est une structure de données arborescente auto-équilibrée qui peut prendre en charge efficacement les opérations simultanées. Dans la base de données Oracle, l'index B-Tree est le type d'index le plus couramment utilisé. 2. L'index Bit Graph est basé sur un type d'index ; sur l'algorithme bitmap et ainsi de suite.

Méthode de traitement asynchrone de la programmation simultanée Select Channels Go à l'aide de Golang Méthode de traitement asynchrone de la programmation simultanée Select Channels Go à l'aide de Golang Sep 28, 2023 pm 05:27 PM

Méthode de traitement asynchrone de la programmation simultanée SelectChannelsGo à l'aide de golang Introduction : La programmation simultanée est un domaine important dans le développement de logiciels modernes, qui peut améliorer efficacement les performances et la réactivité des applications. Dans le langage Go, la programmation simultanée peut être implémentée de manière simple et efficace à l'aide des instructions Channels et Select. Cet article explique comment utiliser Golang pour les méthodes de traitement asynchrone de la programmation simultanée SelectChannelsGo et fournit des informations spécifiques.

Comment implémenter la liaison d'événement de changement d'éléments sélectionnés dans jQuery Comment implémenter la liaison d'événement de changement d'éléments sélectionnés dans jQuery Feb 23, 2024 pm 01:12 PM

jQuery est une bibliothèque JavaScript populaire qui peut être utilisée pour simplifier la manipulation du DOM, la gestion des événements, les effets d'animation, etc. Dans le développement Web, nous rencontrons souvent des situations dans lesquelles nous devons modifier la liaison d'événements sur des éléments sélectionnés. Cet article explique comment utiliser jQuery pour lier des événements de modification d'éléments sélectionnés et fournit des exemples de code spécifiques. Tout d'abord, nous devons créer un menu déroulant avec des options utilisant des étiquettes :

Comment résoudre le problème selon lequel l'index dépasse la limite du tableau Comment résoudre le problème selon lequel l'index dépasse la limite du tableau Nov 15, 2023 pm 05:22 PM

Les solutions sont les suivantes : 1. Vérifiez si la valeur d'index est correcte : confirmez d'abord si votre valeur d'index dépasse la plage de longueur du tableau. L'index du tableau commence à 0, donc la valeur maximale de l'index doit être la longueur du tableau moins 1 ; Vérifiez les conditions aux limites de la boucle : si vous utilisez des index pour accéder au tableau dans une boucle, assurez-vous que les conditions aux limites de la boucle sont correctes ; 3. Initialisez le tableau : avant d'utiliser un tableau, assurez-vous que le tableau a été correctement initialisé ; 4. Utilisez la gestion des exceptions : vous pouvez utiliser le mécanisme de gestion des exceptions dans le programme pour détecter les erreurs lorsque l'index dépasse les limites du tableau. et gérez-le en conséquence.

Comment améliorer l'efficacité du regroupement et de l'agrégation de données en PHP et MySQL via des index ? Comment améliorer l'efficacité du regroupement et de l'agrégation de données en PHP et MySQL via des index ? Oct 15, 2023 am 11:39 AM

Comment améliorer l'efficacité du regroupement et de l'agrégation de données en PHP et MySQL via des index ? Introduction : PHP et MySQL sont actuellement les langages de programmation et les systèmes de gestion de bases de données les plus utilisés, et sont souvent utilisés pour créer des applications Web et traiter de grandes quantités de données. Le regroupement et l'agrégation de données sont des opérations courantes lors du traitement de grandes quantités de données, mais si les index ne sont pas conçus et utilisés de manière appropriée, ces opérations peuvent devenir très inefficaces. Cet article présentera comment utiliser les index pour améliorer l'efficacité du regroupement et de l'agrégation de données dans PHP et MySQL, et améliorer

PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne Mar 21, 2024 am 10:31 AM

Cet article expliquera en détail comment PHP renvoie la chaîne de la position de début à la position de fin d'une chaîne dans une autre chaîne. L'éditeur pense que c'est assez pratique, je le partage donc avec vous comme référence, j'espère que vous finirez de lire. cet article. Vous pouvez tirer quelque chose de cet article. Utilisez la fonction substr() en PHP pour extraire des sous-chaînes d'une chaîne. La fonction substr() peut extraire des caractères dans une plage spécifiée d'une chaîne. La syntaxe est la suivante : substr(string,start,length) où : string : la chaîne d'origine à partir de laquelle la sous-chaîne doit être extraite. start : L'index de la position de départ de la sous-chaîne (à partir de 0). length (facultatif) : la longueur de la sous-chaîne. Si non précisé, alors

Applications avancées de découpage et d'indexation Python : révélez les fonctions cachées et explorez les possibilités infinies de la programmation Applications avancées de découpage et d'indexation Python : révélez les fonctions cachées et explorez les possibilités infinies de la programmation Feb 19, 2024 pm 08:40 PM

La syntaxe de base du découpage en Python consiste à utiliser la syntaxe [start:end:step] pour les opérations de découpage, où start représente la position de départ de la tranche, end représente la position finale de la tranche et step représente l'étape de découpage. Si start est omis, cela signifie un découpage à partir du début de la liste ou de la chaîne ; si end est omis, cela signifie un découpage jusqu'à la fin de la liste ou de la chaîne ; si step est omis, cela signifie que la taille du pas est de 1. Par exemple : ma_list=[1,2,3,4,5]#Couper du 2ème élément au 4ème élément (hors 4ème élément) sub_list=my_list[1:4]#[2,3,4 ]#Start découpage du premier élément jusqu'à la fin de la liste sub_li

Comment charger correctement les casques Bluetooth Comment charger correctement les casques Bluetooth Feb 22, 2024 pm 10:42 PM

Le casque Bluetooth est l'un des appareils indispensables dans la vie quotidienne des gens modernes. Sa connexion sans fil et sa conception portable nous permettent de profiter d'une expérience plus libre et pratique lorsque nous profitons de la musique, des appels et du sport. Cependant, de nombreuses personnes se posent une question courante lorsqu'elles utilisent des casques Bluetooth : comment charger correctement les casques Bluetooth pour garantir leurs performances et leur durée de vie. Ci-dessous, je vais vous présenter en détail la méthode de chargement correcte des casques Bluetooth. Tout d’abord, il est important de choisir le bon adaptateur et le bon câble de charge. Les casques Bluetooth sont généralement livrés avec un boîtier de chargement doté d'un chargeur

See all articles