Maison base de données tutoriel mysql MySQL索引类型一览 让MySQL高效运行起来_MySQL

MySQL索引类型一览 让MySQL高效运行起来_MySQL

Jun 01, 2016 pm 01:47 PM
数据库表 Oui

bitsCN.com

索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。

在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:

CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  );   我们随机向里面插入了10000条记录,其中有一条:5555, admin。

在查找username="admin"的记录 SELECT * FROM mytable WHERE username=admin;时,如果在username上已经建立了索引,MySQL无须任何扫描,即准确可找到该记录。相反,MySQL会扫描所有记录,即要查询10000条记录。

索引分单列索引和组合索引。单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引。组合索引,即一个索包含多个列。

MySQL索引类型包括:

(1)普通索引

这是最基本的索引,它没有任何限制。它有以下几种创建方式:

◆创建索引

CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度;如果是BLOB和TEXT类型,必须指定 length,下同。

◆修改表结构

ALTER mytable ADD INDEX [indexName] ON (username(length)) ◆创建表的时候直接指定

CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   INDEX [indexName] (username(length))   );  删除索引的语法:

DROP INDEX [indexName] ON mytable;

(2)唯一索引

它与前面的普通索引类似,不同的就是:索引列的值必须唯一,但允许有空值。如果是组合索引,则列值的组合必须唯一。它有以下几种创建方式:

◆创建索引

CREATE UNIQUE INDEX indexName ON mytable(username(length)) ◆修改表结构

ALTER mytable ADD UNIQUE [indexName] ON (username(length)) ◆创建表的时候直接指定

CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   UNIQUE [indexName] (username(length))   ); 

(3)主键索引

它是一种特殊的唯一索引,不允许有空值。一般是在建表的时候同时创建主键索引:

CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   PRIMARY KEY(ID)   );  当然也可以用 ALTER 命令。记住:一个表只能有一个主键。

(4)组合索引

为了形象地对比单列索引和组合索引,为表添加多个字段:

CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL,   city VARCHAR(50) NOT NULL,   age INT NOT NULL  );  为了进一步榨取MySQL的效率,就要考虑建立组合索引。就是将 name, city, age建到一个索引里:

ALTER TABLE mytable ADD INDEX name_city_age (name(10),city,age); 建表时,usernname长度为 16,这里用 10。这是因为一般情况下名字的长度不会超过10,这样会加速索引查询速度,还会减少索引文件的大小,提高INSERT的更新速度。

如果分别在 usernname,city,age上建立单列索引,让该表有3个单列索引,查询时和上述的组合索引效率也会大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但MySQL只能用到其中的那个它认为似乎是最有效率的单列索引。

建立这样的组合索引,其实是相当于分别建立了下面三组组合索引:

usernname,city,age   usernname,city   usernname  为什么没有 city,age这样的组合索引呢?这是因为MySQL组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个SQL就会用到这个组合索引:

SELECT * FROM mytable WHREE username="admin" AND city="郑州"  SELECT * FROM mytable WHREE username="admin" 而下面几个则不会用到:

SELECT * FROM mytable WHREE age=20 AND city="郑州"  SELECT * FROM mytable WHREE city="郑州"

(5)建立索引的时机

到这里我们已经学会了建立索引,那么我们需要在什么情况下建立索引呢?一般来说,在WHERE和JOIN中出现的列需要建立索引,但也不完全如此,因为MySQL只对,>=,BETWEEN,IN,以及某些时候的LIKE才会使用索引。例如:

SELECT t.Name  FROM mytable t LEFT JOIN mytable m    ON t.Name=m.username WHERE m.age=20 AND m.city=郑州 此时就需要对city和age建立索引,由于mytable表的userame也出现在了JOIN子句中,也有对它建立索引的必要。

刚才提到只有某些时候的LIKE才需建立索引。因为在以通配符%和_开头作查询时,MySQL不会使用索引。例如下句会使用索引:

SELECT * FROM mytable WHERE username likeadmin% 而下句就不会使用:

SELECT * FROM mytable WHEREt Name like%admin 因此,在使用LIKE时应注意以上的区别。

(6)索引的不足之处

上面都在说使用索引的好处,但过多的使用索引将会造成滥用。因此索引也会有它的缺点:

◆虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件。

◆建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。

索引只是提高效率的一个因素,如果你的MySQL有大数据量的表,就需要花时间研究建立最优秀的索引,或优化查询语句。

(7)使用索引的注意事项

使用索引时,有以下一些技巧和注意事项:

◆索引不会包含有NULL值的列

只要列中包含有NULL值都将不会被包含在索引中,复合索引中只要有一列含有NULL值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为NULL。

◆使用短索引

对串列进行索引,如果可能应该指定一个前缀长度。例如,如果有一个CHAR(255)的列,如果在前10个或20个字符内,多数值是惟一的,那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。

◆索引列排序

MySQL查询只使用一个索引,因此如果where子句中已经使用了索引的话,那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引。

◆like语句操作

一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。

◆不要在列上进行运算

select * from users where YEAR(adddate)

select * from users where adddate

◆不使用NOT IN和操作

以上,就对其中MySQL索引类型进行了介绍。

bitsCN.com
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)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
2 Il y a quelques semaines 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)

Comment créer et gérer des tables de base de données en utilisant PHP Comment créer et gérer des tables de base de données en utilisant PHP Sep 09, 2023 pm 04:48 PM

Comment utiliser PHP pour créer et gérer des tables de bases de données Avec le développement rapide d'Internet, les bases de données sont devenues un élément indispensable de divers sites Web et applications. En PHP, nous pouvons utiliser un système de gestion de base de données (SGBD) tel que MySQL pour créer et gérer des tables de base de données. Cet article vous apprendra comment utiliser PHP pour implémenter cette fonction, avec des exemples de code correspondants. Se connecter à la base de données Tout d'abord, nous devons nous connecter à la base de données en PHP. Vous pouvez utiliser l'extension mysqli ou PDO fourni par PHP pour réaliser cette fonction.

Comment distinguer les vues et les tables de base de données Comment distinguer les vues et les tables de base de données Aug 22, 2023 am 11:27 AM

Les vues et les tables de base de données sont deux concepts différents dans la base de données, avec des caractéristiques et des utilisations différentes. Une table est une entité qui stocke réellement des données dans la base de données, tandis qu'une vue est une table virtuelle dérivée d'une ou plusieurs tables, utilisée pour spécifier la manière de les utiliser. présenter et manipuler des données. Les tableaux ont une plus grande persistance des données, tandis que les vues offrent un accès aux données plus flexible et plus pratique.

Quelles sont les différences entre les vues et les tables de base de données ? Quelles sont les différences entre les vues et les tables de base de données ? Sep 04, 2023 pm 03:13 PM

Les différences entre les vues de base de données et les tables sont les suivantes : 1. Une table est une structure physique utilisée pour stocker des données dans une base de données, tandis qu'une vue est simplement un ensemble de résultats de requête basé sur une ou plusieurs tables. 2. Une table est le stockage physique ; unité de données, et une vue fournit uniquement des règles pour visualiser et exploiter les données des tables ; 3. Les vues fournissent un mécanisme de sécurité avancé pour la base de données, et les tables n'ont aucun mécanisme de sécurité ; 4. Les vues sont des abstractions de tables ; 5. Les vues peuvent en combiner plusieurs ; les tables dans les requêtes, et les tables ne peuvent interroger qu'une seule table ; 6. Les tables sont des structures permanentes dans la base de données, les vues ne le sont pas ; 7. Les vues peuvent créer des vues avec le même nom, mais les tables ne peuvent pas créer des tables avec le même nom, etc.

Qu'est-ce que la pièce de protocole NEAR ? Quelles sont les caractéristiques des pièces du protocole NEAR ? Qu'est-ce que la pièce de protocole NEAR ? Quelles sont les caractéristiques des pièces du protocole NEAR ? Mar 04, 2024 pm 11:20 PM

NEARProtocol : une plateforme blockchain évolutive et conviviale NEARProtocol est une plateforme blockchain utilisant la technologie de partitionnement conçue pour relever les défis rencontrés par la technologie blockchain en termes d'évolutivité, de convivialité et de sécurité. Il fournit aux développeurs une plate-forme efficace et conviviale qui leur permet de créer et de déployer facilement des applications décentralisées (dApps). NEARProtocol est conçu pour réduire les obstacles au développement de la blockchain tout en offrant un haut degré d'efficacité et de sécurité. En adoptant la technologie de partitionnement, NEARProtocol peut mieux gérer les transactions à grande échelle et offrir aux utilisateurs des délais de confirmation de transaction plus rapides. Dans l'ensemble, NEARProtocol est conçu pour fournir

Exportation de données : table de base de données personnalisée Exportation de données : table de base de données personnalisée Sep 02, 2023 pm 06:01 PM

Comme mentionné dans le premier article de cette série, l'un des principaux problèmes des tables de bases de données personnalisées est qu'elles ne sont pas gérées par les gestionnaires d'importation et d'exportation existants. Cet article vise à résoudre ce problème, mais il convient de noter qu’il n’existe actuellement aucune solution pleinement satisfaisante. Considérons deux scénarios : La table personnalisée fait référence à une table WordPress native. La table personnalisée est totalement indépendante de la table native. Le « pire des cas » est le premier cas. Prenons comme exemple une table personnalisée qui enregistre les journaux d'activité des utilisateurs. Il fait référence à l’ID utilisateur, à l’ID d’objet et au type d’objet, qui font tous référence à des données stockées dans des tables WordPress natives. Imaginez maintenant que quelqu’un souhaite importer toutes les données de son site WordPress vers un deuxième site Web. Par exemple, complètement

Quelles sont les différences entre les vues et les tables de base de données ? Quelles sont les différences entre les vues et les tables de base de données ? Aug 22, 2023 am 11:15 AM

Il existe cinq différences entre les vues de base de données et les tables de la base de données : 1. Les vues ne stockent pas de données, mais les tables sont des objets qui stockent réellement des données. 2. Les données d'une vue sont une table virtuelle et les données de la table peuvent provenir ; à partir de plusieurs sources ; 3. La vue hérite de la structure de l'instruction de requête, tandis que la table a sa propre définition structurelle ; 4. La vue ne peut pas être mise à jour, alors que la table permet des opérations directes sur elle ; autorisations de la table sous-jacente, et la table possède ses propres autorisations d'accès.

Quel est le nombre de broches dans l'interface du câble de la carte mère de l'alimentation Antec 650 ? (Schéma de câblage de l'alimentation Antec 650) Quel est le nombre de broches dans l'interface du câble de la carte mère de l'alimentation Antec 650 ? (Schéma de câblage de l'alimentation Antec 650) Jan 03, 2024 am 10:46 AM

Combien de broches possède le câble de la carte mère Antec 650w ? Le câble d'alimentation de la carte mère d'alimentation Antec 650W est généralement composé de 24 broches, ce qui constitue la plus grande interface d'alimentation de la carte mère. Sa fonction est de connecter la carte mère et l'alimentation électrique pour alimenter la carte mère et les autres composants du système. De plus, l'alimentation Antec 650W peut également inclure d'autres types d'interfaces d'alimentation, telles que CPU8pin, PCIe6+2pin, etc., pour connecter d'autres composants tels que le CPU et les cartes graphiques indépendantes. Tutoriel sur le routage de la carte mère Le routage de la carte mère est le processus de connexion de circuits entre divers composants électroniques lors de la conception d'une carte mère. Dans ce processus, des facteurs tels que la stabilité du circuit, la vitesse de transmission du signal et la précision doivent être pris en compte. Lorsque vous acheminez le câblage selon le schéma de circuit, faites attention à la disposition et sélectionnez la largeur et la distance de ligne appropriées à éviter.

Optimiser la structure des tables MySQL pour résoudre les problèmes de connexion Optimiser la structure des tables MySQL pour résoudre les problèmes de connexion Jun 30, 2023 pm 01:04 PM

Problème de connexion MySQL : Comment optimiser la structure des tables de la base de données ? Les connexions aux bases de données sont un élément très important lors du développement d’applications. Lorsque nous utilisons la base de données MySQL, optimiser correctement la structure des tables de la base de données peut améliorer les performances des requêtes et des connexions, améliorant ainsi les performances des applications et la vitesse de réponse. Cet article présentera quelques méthodes pour optimiser la structure des tables de la base de données afin de résoudre les problèmes de connexion MySQL. 1. Concevoir raisonnablement la structure des tables. Lors de la conception de la structure des tables de la base de données, il est nécessaire de concevoir raisonnablement les relations entre les tables en fonction des besoins du programme d'application afin de réduire les données.

See all articles