Índice de fondo-mysql

Esta sección le permite comprender qué es un índice y el uso de un índice. Hay una diferencia entre los datos de búsqueda indexados e indizados.

PD: También acabo de enterarme sobre el índice mysql, hay muchas deficiencias, no lo rocíe, aquí el hermano menor complace al hermano mayor, esta es solo mi opinión personal, definitivamente hay muchos problemas, bienvenidos a discutir juntos. Finalmente probé una prueba de 600,000 datos, con la diferencia entre indexado y no indexado

 

Compartir videos https://www.bilibili.com/video/BV1bJ411w7ej?from=search&seid=3762907548620414423

Si no entiende, puede ver el video. Lo que estoy hablando no es muy detallado, solo mi comprensión personal.

 

La Enciclopedia Baidu explicó:

En una base de datos relacional, un índice es una estructura de almacenamiento física separada que clasifica los valores de una o más columnas en una tabla de base de datos. Es una colección de uno o varios valores de columna en una tabla y la tabla de puntería correspondiente. Una lista de punteros lógicos en las páginas de datos que identifican físicamente estos valores . La función de índice es equivalente al catálogo de libros, puede encontrar rápidamente el contenido requerido de acuerdo con el número de página en el catálogo .

> Entiendo:

Sintió que era lo que llamamos el número de página, lo que nos dio instrucciones, lo mismo que el número de página y las letras del diccionario Xinhua. Encuentra el texto que queremos basado en letras o radicales.

 

Comprenda cómo mysql encuentra los datos que queremos;

> Antes de buscar datos, comprendamos MyISAM, motor de plantillas InnoDB;

Puedes visitar el siguiente enlace para ver la diferencia entre los dos

http://blog.itpub.net/21374452/viewspace-2136284/

En pocas palabras, hay aproximadamente cinco diferencias

1. estructura de almacenamiento

2. espacio de almacenamiento

3. Apoyo a las cosas

Operación 4.CURD

5. Claves foráneas

 

Hablando de lo anterior, principalmente queremos decir la tabla del motor de plantillas InnoDB, debe crear una clave primaria (generalmente nuestra tabla debe tener una clave primaria)

Ahora decimos cómo los datos de consulta de mysql, los datos de consulta de mysql son para consultar toda la tabla, ahora revisamos la siguiente tabla

La declaración es select * from mysqltest donde name = Xiao Ming 8; Tal declaración sql

Nota: Él siempre está mirando hacia abajo desde arriba, buscando todos los datos en el campo nam para encontrar todos los datos con el valor de Xiaoming 8, para que podamos tener menos datos, también se pueden verificar decenas de miles de datos, si miles Diez mil como este, mira el último del primero ...

 

a) Hablando de innoDB, todos necesitamos tener una clave primaria. Si buscamos la clave primaria, será más conveniente que la anterior. La búsqueda de id es como la condición anterior se cambia para seleccionar * de mysqltest donde id = 8; También es encontrar Xiaoming 8, esto El método de búsqueda es que empiezo desde la primera línea y miro hacia abajo. Cuando encuentro que la identificación es 8, detengo la búsqueda. Se puede ver la diferencia. Uno encuentra todo el contenido y el otro se detiene después de encontrarlo. Veamos la definición de la clave primaria,

Su valor se utiliza para identificar de forma exclusiva un registro en la tabla . Esto está claro, porque sabe que solo aparecerá una vez, por lo que no irá a buscarlo, por lo que la adquisición es mucho más rápida, pero esta es la función de la clave principal.

Nota: Lo anterior son todas las claves primarias, no índices, porque siempre pensé que las claves primarias son índices, lo cual fue realmente vergonzoso en ese momento ... por lo que debe distinguirse, el índice y la clave primaria son dos cosas diferentes.

a. Clave primaria: este campo no tiene valores duplicados y no puede estar vacío

b. Índice: el índice también tiene un índice único, pero también son diferentes. El índice único puede estar vacío, pero solo puede haber uno, para garantizar la unicidad.

 

Índice:

1. Varios tipos de índices

Índice ordinario: solo acelera la consulta

Índice único: consulta acelerada + valor de columna único (puede tener un valor nulo)

Índice de clave principal: consulta acelerada + valor de columna único (no nulo) + solo uno en la tabla

Índice combinado: los valores de varias columnas forman un índice, utilizado específicamente para la búsqueda combinada, su eficiencia es mayor que la combinación de índices

Indización de texto completo: segmentación de palabras del contenido de texto, búsqueda

La herramienta nos da tres índices.

2. Método de índice

Hash index, R-Tree index e B + Tree index (dos Hash y un BTREE se dan en la herramienta, BTREE usa B + Tree es definitivamente el mejor)

a.hash index: (generalmente usamos btree index en el proyecto, así que no explique, busque una explicación en Internet)

1. Solo se admiten consultas exactas "=", "IN" y "<=>", y no se pueden usar consultas de rango:
dado que el índice Hash compara los valores Hash después de la operación Hash, solo se puede usar para un filtrado equivalente, No se puede usar para el filtrado basado en rango, porque Hash después del procesamiento por el algoritmo Hash correspondiente
no admite la clasificación:
porque el índice Hash almacena el valor Hash después del cálculo de Hash, y la relación de tamaño del valor Hash no está necesariamente relacionada con Hash Los valores clave antes de la operación son exactamente los mismos, por lo que la base de datos no puede usar los datos del índice para evitar cualquier operación de clasificación
3. El escaneo de la tabla no se puede evitar en ningún momento:
porque el índice Hash compara el valor Hash después de la operación Hash, por lo que incluso si toma un cierto valor No se puede consultar directamente el número de registros de datos de valores clave de Hash desde el índice Hash, pero se debe acceder a los datos reales en la tabla para realizar la comparación correspondiente y obtener los resultados correspondientes
. 4. La eficiencia de recuperación es alta, la recuperación de índice Posicionamiento único, a diferencia del índice B-Tree, que requiere múltiples accesos de E / S desde el nodo raíz al nodo rama, y ​​finalmente al nodo de la página, por lo que la eficiencia de consulta del índice Hash está lejos de ser Más alto que el índice B-Tree
5. Solo el motor de memoria admite el índice Hash explícito, pero su Hash no es único y demasiados conflictos afectarán el rendimiento de la búsqueda. El tipo de índice predeterminado de Memory Engine es el índice Hash, aunque también admite el índice B-Tree

b. Índice BTREE:

> a) índice b-tree, mire la introducción de la imagen, primero defina un registro de datos como un binario [clave, datos], la clave es el valor clave del registro, para diferentes registros de datos. Podemos ver que está bifurcado. Hablemos sobre el método de nuestra consulta ordinaria. Parece una consulta. Una vez hacia abajo sin ramas.

Vistazo a la siguiente imagen se puede ver desde 15 a 56 en el centro de la segunda capa de datos, lo que indica que si nos fuimos a buscar 22 56, se encontró que 56 a 22 grande que deja de buscar , buscará volver a empezar desde la segunda capa A partir del 20, encontró 21, que es mucho más conveniente que nuestra espera 1-2.

Lo anterior es solo mi análisis personal, también hay muchas deficiencias, puede ver el video muy detallado ( https://www.bilibili.com/video/BV1bJ411w7ej?from=search&seid=3762907548620414423 ). Acabo de ver el video para entender un poco al respecto.

 

> b) índice de árbol B +, ver imagen

Hay muchas variantes de B-Tree, la más común de las cuales es B + Tree. Por ejemplo, MySQL generalmente usa B + Tree para implementar su estructura de índice. Se puede ver que la diferencia entre b + tree y b-tree es la ubicación de los datos, lo que significa que el nodo interno no almacena datos, solo la clave; es decir, nuestros datos se colocan en la parte inferior, para que se puedan almacenar más en la parte superior La clave, por supuesto, no tiene ningún nodo y tiene un límite de 16 kb. Si almacenamos datos, debe ser muy pequeño, pero puede almacenarse en la parte superior para poder almacenar más claves.

Lo anterior es solo mi análisis personal, también hay muchas deficiencias, puede ver el video muy detallado ( https://www.bilibili.com/video/BV1bJ411w7ej?from=search&seid=3762907548620414423 ). Acabo de ver el video para entender un poco al respecto.

 

> c) índice de árbol B +, agregar secuencia, ver imagen

La diferencia entre esto y lo anterior es agregar un puntero de acceso secuencial hasta la fecha. Por ejemplo, si busco 15 esta vez y lo encuentro, la próxima vez que busque 18, él descubre que has encontrado 15, y el siguiente es 18, por lo que mirará hacia atrás solo.

Nota: es similar a nuestra clave principal. Su índice también quiere que nuestro contenido aumente automáticamente. Si no aumenta, por ejemplo, ahora es 15 ~ 18, insertando 16, nuestros elementos serán cambiados. Entonces él debe estar todo detrás Cambie, esto será más lento, este es un índice malo, a menudo decimos que un buen índice puede ser tan rápido como Lamborghini, si no se usa, será tan lento como un tractor.

Lo anterior es solo mi análisis personal, también hay muchas deficiencias, puede ver el video muy detallado ( https://www.bilibili.com/video/BV1bJ411w7ej?from=search&seid=3762907548620414423 ). Acabo de ver el video para entender un poco al respecto.

 

Aquí se explica cómo crear un índice;

Use la dirección de descarga de la herramienta Navicat https://www.php.cn/xiazai/gongju

 

Enlace a la base de datos, ábrala, haga clic con el botón derecho en la tabla de diseño de la tabla y haga clic en índice

 

Podemos agregar campos de índice (solo complete la información), hablemos sobre el tipo de índice, el primero es un índice normal, el segundo es un índice único y el tercero es un índice de texto completo;

Método de índice, hay BTREE y HASH, elegimos BTREE directamente y ya está. Entonces guárdalo

 

Implementación del índice MyISAM:

El motor MyISAM utiliza el árbol B + como estructura de índice.El campo de datos del nodo hoja almacena la dirección del registro de datos. La siguiente figura es el diagrama principal del índice MyISAM:

 

 

Implementación del índice InnoDB:

Aunque InnoDB también usa B + Tree como estructura de índice, la implementación específica es muy diferente de MyISAM.

La primera gran diferencia es que los archivos de datos de InnoDB son en sí mismos archivos de índice. Como sabemos por lo anterior, el archivo de índice MyISAM y el archivo de datos están separados, y el archivo de índice solo guarda la dirección del registro de datos. En InnoDB, el archivo de datos de la tabla en sí es una estructura de índice organizada por B + Tree. El campo de datos de hoja de este árbol contiene registros de datos completos. La clave de este índice es la clave principal de la tabla de datos, por lo que el archivo de datos de la tabla InnoDB es el índice principal.

Lo más fácil de ver es que MyISAM almacena el puntero en datos e innoDB almacena toda la columna de datos en datos.

 

Hablemos del problema de 600,000 datos. Probé una búsqueda de 600,000 datos por mí mismo. El tiempo para encontrar datos sin un índice es básicamente de unos 10 segundos. Esto es local. Si está en el servidor, si la configuración del servidor no es buena, entonces puede imaginar, ¿Quién puede esperar unos minutos de espera?

Después de agregar el índice, los datos se generarán en un segundo.

Comparta la base de datos, aquí uso los datos de enlace de cinco niveles, encuentro directamente el pueblo, el pueblo está en la parte inferior. Dirección de descarga https://download.csdn.net/download/weixin_44944193/11868584   plus q 3031453390 sin monedas

 

Índice con herramientas;

La tabla de datos viene con un índice, que es la identificación de la aldea. Agregaremos un índice a su nombre. Lo que queremos verificar es el nombre.

El código de búsqueda php es el siguiente.

Nota: Cambie el nombre de la base de datos, el nombre de la tabla

<?php
$dbhost = 'localhost:3306';  // mysql服务器主机地址
$dbuser = 'root';            // mysql用户名
$dbpass = 'root';          // mysql用户名密码
$conn = mysqli_connect($dbhost, $dbuser, $dbpass);
if(! $conn )
{
    die('连接失败: ' . mysqli_error($conn));
}
// 设置编码,防止中文乱码
mysqli_query($conn , "set names utf8");
 
$where = '跳墩村';
$sql = "select * from wuji where village_name = '$where' ";//要加单引号包着变量
 
mysqli_select_db( $conn, 'test' );
$retval = mysqli_query( $conn, $sql );
if(! $retval )
{
    die('无法读取数据: ' . mysqli_error($conn));
}
echo '<h2>菜鸟教程 mysqli_fetch_array 测试</h2>';
echo '<table border="1"><tr><td> ID</td><td>省份</td><td>市</td><td>区</td><td>镇/乡</td><td>村</td></tr>';
while($row = mysqli_fetch_array($retval, MYSQLI_ASSOC))
{
    echo "<tr><td> {$row['id']}</td> ".
         "<td>{$row['province_name']} </td> ".
         "<td>{$row['city_name']} </td> ".
         "<td>{$row['county_name']} </td> ".
         "<td>{$row['town_name']} </td> ".
         "<td>{$row['village_name']} </td> ".
         "</tr>";
}
echo '</table>';
mysqli_close($conn);
?>

Fin ~

121 artículos originales publicados · elogiados 18 · más de 20,000 visitas

Supongo que te gusta

Origin blog.csdn.net/weixin_44944193/article/details/105440986
Recomendado
Clasificación