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()要少很多。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Oracle-Indextypen umfassen: 1. B-Tree-Index; 3. Funktionsindex; Bitmap-Verbindungsindex; 10. Zusammengesetzter Index. Detaillierte Einführung: 1. Der B-Tree-Index ist eine selbstausgleichende Baumdatenstruktur, die gleichzeitige Vorgänge effizient unterstützen kann. In der Oracle-Datenbank ist der B-Tree-Index der am häufigsten verwendete Indextyp zum Bitmap-Algorithmus und so weiter.

PHP ist eine weit verbreitete serverseitige Open-Source-Skriptsprache, die alle Aufgaben in der Webentwicklung bewältigen kann. PHP wird in der Webentwicklung häufig verwendet, insbesondere wegen seiner hervorragenden Leistung bei der dynamischen Datenverarbeitung, weshalb es von vielen Entwicklern geliebt und verwendet wird. In diesem Artikel erklären wir Ihnen Schritt für Schritt die Grundlagen von PHP, um Anfängern den Einstieg bis zum Erlernen von PHP-Kenntnissen zu erleichtern. 1. Grundlegende Syntax PHP ist eine interpretierte Sprache, deren Code HTML, CSS und JavaScript ähnelt. Jede PHP-Anweisung endet mit einem Semikolon

Die Lösungen sind: 1. Überprüfen Sie, ob der Indexwert korrekt ist: Überprüfen Sie zunächst, ob Ihr Indexwert den Längenbereich des Arrays überschreitet. Der Index des Arrays beginnt bei 0, daher sollte der maximale Indexwert die Array-Länge minus 1 sein. Überprüfen Sie die Schleifenrandbedingungen: Wenn Sie Indizes für den Array-Zugriff in einer Schleife verwenden, stellen Sie sicher, dass die Schleifenrandbedingungen korrekt sind; 3. Initialisieren Sie das Array: Stellen Sie vor der Verwendung eines Arrays sicher, dass das Array korrekt initialisiert wurde. 4. Verwenden Sie die Ausnahmebehandlung: Sie können den Ausnahmebehandlungsmechanismus im Programm verwenden, um Fehler abzufangen, bei denen der Index die Grenzen des Arrays überschreitet. und entsprechend damit umgehen.

Wie kann die Effizienz der Datengruppierung und Datenaggregation in PHP und MySQL durch Indizes verbessert werden? Einführung: PHP und MySQL sind derzeit die am weitesten verbreiteten Programmiersprachen und Datenbankverwaltungssysteme und werden häufig zum Erstellen von Webanwendungen und zum Verarbeiten großer Datenmengen verwendet. Datengruppierung und Datenaggregation sind häufige Vorgänge bei der Verarbeitung großer Datenmengen. Wenn Indizes jedoch nicht ordnungsgemäß entworfen und verwendet werden, können diese Vorgänge sehr ineffizient werden. In diesem Artikel wird erläutert, wie Sie mithilfe von Indizes die Effizienz der Datengruppierung und Datenaggregation in PHP und MySQL verbessern und verbessern

In diesem Artikel wird ausführlich erläutert, wie PHP die Zeichenfolge von der Startposition zur Endposition einer Zeichenfolge in einer anderen Zeichenfolge zurückgibt. Der Herausgeber hält dies für recht praktisch, daher teile ich es Ihnen als Referenz mit diesem Artikel können Sie etwas abgewinnen. Verwenden Sie die Funktion substr() in PHP, um Teilzeichenfolgen aus einer Zeichenfolge zu extrahieren. Die Funktion substr() kann Zeichen innerhalb eines angegebenen Bereichs aus einer Zeichenfolge extrahieren. Die Syntax lautet wie folgt: substr(string,start,length) wobei: string: der ursprüngliche String, aus dem der Teilstring extrahiert werden soll. start: Der Index der Startposition des Teilstrings (beginnend bei 0). Länge (optional): Die Länge des Teilstrings. Wenn nicht angegeben, dann

Die grundlegende Syntax des Slicings in Python besteht darin, die Syntax [start:end:step] für Slicing-Vorgänge zu verwenden, wobei start die Startposition des Slices, end die Endposition des Slices und step den Slicing-Schritt darstellt. Wenn „start“ weggelassen wird, bedeutet dies, dass vom Anfang der Liste oder Zeichenfolge aus geschnitten wird; wenn „end“ weggelassen wird, bedeutet dies, dass bis zum Ende der Liste oder Zeichenfolge geschnitten wird, wenn „step“ weggelassen wird, bedeutet dies, dass die Schrittgröße 1 ist. Zum Beispiel: my_list=[1,2,3,4,5]#Schnitt vom 2. Element zum 4. Element (mit Ausnahme des 4. Elements) sub_list=my_list[1:4]#[2,3,4 ]#Start Schneiden vom ersten Element bis zum Ende der Liste sub_li

Ein Array ist eine Sammlung ähnlicher Datenelemente, die organisiert gespeichert sind. Jedes Datenelement im Array wird durch einen Indexwert identifiziert. Arrays in Python Python verfügt nicht über eine native Array-Datenstruktur. Daher können wir eine Listendatenstruktur anstelle eines Arrays verwenden. [10,4,11,76,99] Gleichzeitig können wir das PythonNumpy-Modul verwenden, um Arrays zu verarbeiten. Das durch das Numpy-Modul definierte Array ist −array([1,2,3,4]). Die Indizierung in Python beginnt bei 0, sodass auf die oben genannten Array-Elemente mit ihren jeweiligen Indexwerten wie 0, 1, 2 bis n zugegriffen werden kann. 1. Im folgenden Artikel werden wir verschiedene Möglichkeiten zum Einfügen mehrerer Elemente an bestimmten Indizes sehen. Eintreten und verlieren

Tipps und FAQs zur Verwendung eindeutiger Indizes in MySQL MySQL ist ein beliebtes relationales Datenbankverwaltungssystem. In praktischen Anwendungen spielen eindeutige Indizes (uniqueindex) eine wichtige Rolle beim Entwurf von Datentabellen. Ein eindeutiger Index kann sicherstellen, dass der Wert einer bestimmten Spalte in der Tabelle eindeutig ist, und doppelte Daten vermeiden. In diesem Artikel werden die Verwendungsfähigkeiten eindeutiger Indizes in MySQL vorgestellt, einige häufig gestellte Fragen beantwortet und spezifische Codebeispiele bereitgestellt, um den Lesern ein besseres Verständnis zu erleichtern. 1.Erstellen
