Maison base de données tutoriel mysql Mysql 索引的基础(下)_MySQL

Mysql 索引的基础(下)_MySQL

May 30, 2016 pm 05:10 PM
基础 索引

如果需要存储大量的URL并需要根据URL进行搜索查找。如果使用B-Tree 来存储URL,存储的内容就会很大,因为URL本身都很长。正常情况下会有如下查询:

 

SELECT id FROM url WHERE url="http://www.baidu.com";

 

若删除原来URL上的索引,而新增一个被索引的url_crc列,使用CRC32做hash ,就可以用下面的方式查询:

 

SELECT id FROM url WHERE url='http://www.baidu.com' AND rul_crc=CRC32('http://www.baidu.com');

 

这样做性能非常高,因为MySQL 优化器会使用这个选择性很高而体积很小的基于url_crc列的索引来完成查找。即使有多个相同的索引值,查找任然很快,只需要根据hash值做快速的整数比较就能找到索引条目,然后一一返回对应的行。另外一种方式就是对完整的URL字符串做索引,那样会非常慢。

 

这样实现的缺陷是需要维护hash值。可以手动维护,可以触发器实现。如果采用这种方式,记住,不要使用SHA1()和MD5()作为哈希函数。因为这两个函数计算出来的hash值时非常长的字符串,会浪费更大的空间,比较时也会更慢。SHA1()和MD5()是强加密函数,设计目标是最大限度的消除冲突,蛋这里并不需要这样搞的要求。简单hash函数的冲突在一个可以接受的范围,同事有能提供更好的性能。

 

如果数据表非常大,CRC32()会出现大量的hash冲突,则可以考虑自己实现一个简单的64位hash函数。这个自定义的函数要返回整数,而不是字符串。一个简单的办法可以使用MD5()函数返回值的一部分来作为自定义hash函数。这肯能比自己写一个hash算法的性能要差,不过这样实现最简单。

 

SELECT CONV(RIGHT(MD5('http://www.baidu.com'),16),16,10) AS HASH64.

 

处理hash冲突。当使用hash索引进行查询的时候,必须在WHERE子句中包含常量值:

 

SELECT id from url WHERE url=crc32('http://www.baidu.com') AND url='http://www.baidu.com';

 

一旦出现hash冲突,另一个字符串的hash值也恰好是相同的,则下面的语句是无法正确工作的:

 

SELECT id from url WHERE url=crc32('http://www.baidu.com');

 

因为所谓的‘生日悖论’ 出现hash冲突的概率的增长率可能比想象的要快的多,CRC32()返回的是32位整数,当索引有9.3W条记录时,出现冲突的概率是1%。例如,我们将'/usr/share/dic/words' 中的词倒数数据表,并进行crc32()计算,最后会有98569行。这就已经出现一次hash冲突了。要避免hash冲突问题,必须在WHERE 条件中带入hahs值和对应的列值。如果不是想查询具体的值,例如只是统计记录数(不精确的),则可以不带入列值,直接使用crc32()的hash值查询即可。还可以使用FNV64()函数作为hash函数,hash值为64位,速度非常快,且冲突比crc32()要少很多。

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)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Où trouver la courte de la grue à atomide atomique
1 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)

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.

Tutoriel de base de PHP : du débutant au maître Tutoriel de base de PHP : du débutant au maître Jun 18, 2023 am 09:43 AM

PHP est un langage de script open source côté serveur largement utilisé qui peut gérer toutes les tâches de développement Web. PHP est largement utilisé dans le développement Web, notamment pour ses excellentes performances en matière de traitement dynamique des données, il est donc apprécié et utilisé par de nombreux développeurs. Dans cet article, nous expliquerons les bases de PHP étape par étape pour aider les débutants à devenir compétents. 1. Syntaxe de base PHP est un langage interprété dont le code est similaire au HTML, CSS et JavaScript. Chaque instruction PHP se termine par un point-virgule ;

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

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

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

Programme Python pour insérer plusieurs éléments dans un tableau à des positions d'index spécifiées Programme Python pour insérer plusieurs éléments dans un tableau à des positions d'index spécifiées Sep 03, 2023 pm 10:13 PM

Un tableau est une collection d’éléments de données similaires stockés de manière organisée. Chaque élément de données du tableau est identifié par une valeur d'index. Tableaux en Python Python n'a pas de structure de données de tableau native. Par conséquent, nous pouvons utiliser une structure de données de liste au lieu d’un tableau. [10,4,11,76,99] En même temps, nous pouvons utiliser le module PythonNumpy pour traiter les tableaux. Le tableau défini par le module numpy est −array([1,2,3,4]) L'indexation en Python commence à 0 afin que les éléments du tableau ci-dessus soient accessibles en utilisant leurs valeurs d'index respectives comme 0, 1, 2, jusqu'à n - 1. Dans l'article suivant, nous verrons différentes manières d'insérer plusieurs éléments à des index spécifiés. Entrez et perdez

Comment utiliser les index dans MySQL pour améliorer les performances des requêtes ? Comment utiliser les index dans MySQL pour améliorer les performances des requêtes ? Jul 30, 2023 pm 10:43 PM

Comment utiliser les index dans MySQL pour améliorer les performances des requêtes ? Introduction : MySQL est une base de données relationnelle couramment utilisée. À mesure que la quantité de données augmente, les performances des requêtes deviennent une considération importante. Dans MySQL, les index sont l'un des facteurs clés pour améliorer les performances des requêtes. Cet article présentera ce qu'est un index, pourquoi l'utilisation d'index peut améliorer les performances des requêtes et donnera un exemple de code pour utiliser les index dans MySQL. 1. Qu'est-ce qu'un indice ? Un index est une structure qui trie les valeurs d'une ou plusieurs colonnes dans une table de base de données.

See all articles