Maison base de données tutoriel mysql MongoDB索引概念及使用详解

MongoDB索引概念及使用详解

Jun 07, 2016 pm 04:47 PM
index mongodb 数据库

索引,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓名

索引,使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构,例如 employee 表的姓名(name)列。如果要按姓查找特定职员,与必须搜索表中的所有行相比,索引会帮助您更快地获得该信息。

------------------------------------------------------------------

MongoDB 的详细介绍:请点这里
MongoDB 的下载地址:请点这里

相关阅读:

MongoDB备份与恢复

CentOS编译安装MongoDB

CentOS 编译安装 MongoDB与mongoDB的php扩展

CentOS 6 使用 yum 安装MongoDB及服务器端配置

Ubuntu 13.04下安装MongoDB2.4.3

如何在MongoDB中建立新数据库和集合

MongoDB入门必读(概念与实战并重)

《MongoDB 权威指南》(MongoDB: The Definitive Guide)英文文字版[PDF]

------------------------------------------------------------------

索引的优点:

不需要做全表扫描,只需要扫描索引索引只存储了这个表的数据的一小部分,这小部分可以帮我们实现快速查询,因此扫描的时候只扫描这一小部分即可,如果将这小部分装载入内存中的话,速度会更快

·大大减少了服务器需要扫描的数据量

·索引可以帮助服务器避免排序或使用临时表

·索引可以将随机I/O转换为顺序I/O

 

索引的缺点:

索引是保存了数据表上的一小部分数据,那么这些数据是需要额外存储的,毫无疑问如果更新了表中的数据,那么响应的索引数据也要跟着更新,加速了查找操作,但是减少了写入速度对查找的加速是否有用还是有待评估的,比如我们将一个表中的按年龄实现了索引创建(在年龄上创建了索引)平时大多数操作都是按照名字上去查找的,那么索引则无任何作用,所谓索引必须跟查找建完全匹配才有意义,但我们要知道大多数的查找未必只在有限字段上执行,也就意味着创建索引必须包含多个段,需要看索引是如何去生成的,对于多个条件可以将索引做为组合索引来查找,所以索引的设计是非常有技巧的

索引本身带来的未必是优势,如果一张表中索引非常的多的话,可能对于整个系统性能的影响是非常大的,如果一张表的本身非常小只有十几行,创建索引反而会减慢速度的,因为全表扫描也未必用不了多长时间

但如果表非常大的话,索引则非常有用,如果数据量过大那么索引反而也未必有意义,,比如一张表非常大,上T的数据,可以想象一下创建什么样的索引才可以,所以只能将大表切割成小表,并且分布在不同的物理节点上,对mysql来说叫做分区;对mongodb来讲叫shaerd

 

索引级别:

索引最高级别3星索引

1星:索引国能将相关的记录放置在一起,大大降低了I/O

2星:索引中数据的存储顺序与查找标准中顺序一致(只要设计良好即可)

3星:如果索引中包含查询中所需要的全部数据(覆盖索引)

 

索引的类别:

·顺序索引
·散列索引

将索引映射至散列桶中,映射是通过散列函数进行的

 

评估索引标准:

1、访问类型(如果做等值比较 散列比较好,如果做范围查找,那么顺序比较好

2、访问时长(为完成一个访问,基于索引类型访问的时间可能不同)

3、插入时长(更新表的话索引本身可能会有很大代价,如果散列索引的话只不过重新执行以下算法即可,但是对于顺序索引的话,有可能会移动索引列表后面的索引数据)

4、删除时长

5、空间开销

 

索引类型:

·顺序索引:按照聚集索引存放的文件也被称为索引顺序文件,最常见的索引类型,一般来讲被索引文件记录,如果按照顺序存放则为索引顺序文件,否则为堆文件

·聚集索引:如果某记录文件中的记录顺序是按照对应的搜索码(键/key)的顺序排序的话,被称为主索引

·非聚集索引:搜索码中的指定的次序与记录中的记录次序不一致

 

根据索引中是否为每个记录响应的创建索引项:

·稠密索引 (每个搜索码值都有一个对应的索引项

·稀疏索引 (并不是每个记录都有索引项)

·多级索引 (索引指向索引,以此类推,最后的索引指向数据;

索引本身,主索引之外的索引被称为辅助索引,而只有主索引才能使用稀疏索引,其他所有必需是稠密索引,而辅助索引必须是稠密索引

·B+树索引:

·Balance Tree 平衡树索引

·每个叶子节点,从叶子至根的距离是相同的,所以叫做平衡树

·层次需要根据数据量来动态创建层次

·B+树是一种顺序索引

 

 

散列索引则:

通过散列函数,数据库加载为一次I/O 指针加载数据为2次 I/O。

I/O是占据时间比例是最大值的,索引散列索引的速度在做精确匹配的时候会更快,因为I/O次数要少的多的多,因此散列索引能够让我们避免访问索引结构的。

散列索引的缺点:散列索引还有可能造成偏斜,长久以来可能发有的散列桶有的满有的空 导致每个节点的负载参差不齐,如果散列函数做的不够随机就有可能造成偏斜的情况

所以散列函数需要做到以下几点:

·分布式随机

·分布式均匀

散列函数适用的场景:精确值匹配,比如做等值比较: = ,IN(), 等

 

全文索引

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 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

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 le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Comment le langage Go implémente-t-il les opérations d'ajout, de suppression, de modification et de requête de la base de données ? Mar 27, 2024 pm 09:39 PM

Le langage Go est un langage de programmation efficace, concis et facile à apprendre. Il est privilégié par les développeurs en raison de ses avantages en programmation simultanée et en programmation réseau. Dans le développement réel, les opérations de base de données font partie intégrante. Cet article explique comment utiliser le langage Go pour implémenter les opérations d'ajout, de suppression, de modification et de requête de base de données. Dans le langage Go, nous utilisons généralement des bibliothèques tierces pour faire fonctionner les bases de données, telles que les packages SQL couramment utilisés, gorm, etc. Ici, nous prenons le package SQL comme exemple pour présenter comment implémenter les opérations d'ajout, de suppression, de modification et de requête de la base de données. Supposons que nous utilisons une base de données MySQL.

Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Tutoriel détaillé sur l'établissement d'une connexion à une base de données à l'aide de MySQLi en PHP Jun 04, 2024 pm 01:42 PM

Comment utiliser MySQLi pour établir une connexion à une base de données en PHP : Inclure l'extension MySQLi (require_once) Créer une fonction de connexion (functionconnect_to_db) Appeler la fonction de connexion ($conn=connect_to_db()) Exécuter une requête ($result=$conn->query()) Fermer connexion ( $conn->close())

Comment Hibernate implémente-t-il le mappage polymorphe ? Comment Hibernate implémente-t-il le mappage polymorphe ? Apr 17, 2024 pm 12:09 PM

Le mappage polymorphe Hibernate peut mapper les classes héritées à la base de données et fournit les types de mappage suivants : join-subclass : crée une table séparée pour la sous-classe, incluant toutes les colonnes de la classe parent. table par classe : créez une table distincte pour les sous-classes, contenant uniquement des colonnes spécifiques aux sous-classes. union-subclass : similaire à join-subclass, mais la table de classe parent réunit toutes les colonnes de la sous-classe.

iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées iOS 18 ajoute une nouvelle fonction d'album 'Récupéré' pour récupérer les photos perdues ou endommagées Jul 18, 2024 am 05:48 AM

Les dernières versions d'Apple des systèmes iOS18, iPadOS18 et macOS Sequoia ont ajouté une fonctionnalité importante à l'application Photos, conçue pour aider les utilisateurs à récupérer facilement des photos et des vidéos perdues ou endommagées pour diverses raisons. La nouvelle fonctionnalité introduit un album appelé "Récupéré" dans la section Outils de l'application Photos qui apparaîtra automatiquement lorsqu'un utilisateur a des photos ou des vidéos sur son appareil qui ne font pas partie de sa photothèque. L'émergence de l'album « Récupéré » offre une solution aux photos et vidéos perdues en raison d'une corruption de la base de données, d'une application d'appareil photo qui n'enregistre pas correctement dans la photothèque ou d'une application tierce gérant la photothèque. Les utilisateurs n'ont besoin que de quelques étapes simples

Une analyse approfondie de la façon dont HTML lit la base de données Une analyse approfondie de la façon dont HTML lit la base de données Apr 09, 2024 pm 12:36 PM

HTML ne peut pas lire directement la base de données, mais cela peut être réalisé via JavaScript et AJAX. Les étapes comprennent l'établissement d'une connexion à la base de données, l'envoi d'une requête, le traitement de la réponse et la mise à jour de la page. Cet article fournit un exemple pratique d'utilisation de JavaScript, AJAX et PHP pour lire les données d'une base de données MySQL, montrant comment afficher dynamiquement les résultats d'une requête dans une page HTML. Cet exemple utilise XMLHttpRequest pour établir une connexion à la base de données, envoyer une requête et traiter la réponse, remplissant ainsi les données dans les éléments de la page et réalisant la fonction de lecture HTML de la base de données.

Analyse des principes de base du système de gestion de base de données MySQL Analyse des principes de base du système de gestion de base de données MySQL Mar 25, 2024 pm 12:42 PM

Analyse des principes de base du système de gestion de base de données MySQL MySQL est un système de gestion de base de données relationnelle couramment utilisé qui utilise le langage de requête structuré (SQL) pour le stockage et la gestion des données. Cet article présentera les principes de base du système de gestion de base de données MySQL, y compris la création de bases de données, la conception de tables de données, l'ajout de données, la suppression, la modification et d'autres opérations, et fournira des exemples de code spécifiques. 1. Création d'une base de données Dans MySQL, vous devez d'abord créer une instance de base de données pour stocker les données. Le code suivant peut créer un fichier nommé "mon

Comment Go WebSocket s'intègre-t-il aux bases de données ? Comment Go WebSocket s'intègre-t-il aux bases de données ? Jun 05, 2024 pm 03:18 PM

Comment intégrer GoWebSocket à une base de données : Configurer une connexion à la base de données : Utilisez le package database/sql pour vous connecter à la base de données. Stocker les messages WebSocket dans la base de données : utilisez l'instruction INSERT pour insérer le message dans la base de données. Récupérer les messages WebSocket de la base de données : utilisez l'instruction SELECT pour récupérer les messages de la base de données.

Conseils et pratiques pour gérer les caractères chinois tronqués dans les bases de données avec PHP Conseils et pratiques pour gérer les caractères chinois tronqués dans les bases de données avec PHP Mar 27, 2024 pm 05:21 PM

PHP est un langage de programmation back-end largement utilisé dans le développement de sites Web. Il possède de puissantes fonctions d'exploitation de bases de données et est souvent utilisé pour interagir avec des bases de données telles que MySQL. Cependant, en raison de la complexité du codage des caractères chinois, des problèmes surviennent souvent lorsqu'il s'agit de caractères chinois tronqués dans la base de données. Cet article présentera les compétences et les pratiques de PHP dans la gestion des caractères chinois tronqués dans les bases de données, y compris les causes courantes des caractères tronqués, les solutions et des exemples de code spécifiques. Les raisons courantes pour lesquelles les caractères sont tronqués sont des paramètres de jeu de caractères incorrects dans la base de données : le jeu de caractères correct doit être sélectionné lors de la création de la base de données, comme utf8 ou u.

See all articles