Mysql 索引的基础(下)_MySQL
如果需要存储大量的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()要少很多。

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

AI Hentai Generator
Générez AI Hentai gratuitement.

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds



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.

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 ;

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 ? 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

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

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

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 ? 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.
