1.2, los índices de MySQL y vistas (Linux nube Mastering)

 

CONTENDER

A, los índices de MySQL

1.1 Introducción a los índices

1.2 Índice de Clasificación

1.3 Creación de un índice

1.4 Índice de Gestión

Dos, vista MySQL vista

2.1 Ver Perfil

2.2 Creación de una vista

Vista Manager 2.3 (ver, modificar, borrar)


A, los índices de MySQL

Presentado por primera vez en MySQL índice definiciones y funciones de clasificación, y luego le muestra cómo crear un índice, el índice de modificar, ver y probar el índice, elimine el índice .


1.1 Introducción a los índices


        En el índice de MySQL, también conocido como "clave" también se puede interpretar como una clave, es un motor de almacenamiento estructura de datos usada para encontrar rápidamente el registro . Índice para un buen rendimiento es fundamental, sobre todo cuando la cantidad de datos en la tabla cada vez más, el índice efecto más importante en el rendimiento.

Se puede entender, el índice es equivalente a la mesa secuenciador diccionario, si desea comprobar una palabra, si no se utiliza la tabla secuenciador, tendrá cientos de páginas de una página a comprobar. Índice de consulta puede mejorar el rendimiento en varios órdenes de magnitud, es simplemente para mejorar nuestra velocidad de datos de la consulta.

Pero hay lugares malos, la indexación se llevará a algunos recursos, como la inserción de datos será mucho más lenta después de la indexación, así que por lo general después de los datos está totalmente insertada en el índice. O que se ha construido de nuevo después de que el mayor índice de inserción de datos, se recomienda que elimine el índice y luego insertar los datos, y por último índice (lo digo en general, en el caso de la inserción masiva de datos oh, si no una gran cantidad de datos, a continuación, no prestar atención a ella).


1.2 Índice de Clasificación

El índice general, el índice de texto único índice, un índice separado, índice de varias columnas, un índice espacial.

en general, establecemos el índice general en ella, los requisitos específicos de un tratamiento particular.
 

1.3 Creación de un índice

(1) Cuando se crea una tabla de indexación
sintaxis:

CREATE TABLE 表名(
字段名1 数据类型 [完整性约束条件..],
字段名2 数据类型 [完整性约束条件..],
[UNIQUE  | FULLTEXT | SPATIAL ] INDEX | KEY
[索引名] (字段名[(长度)] [ASC | DESC])
);

Ejemplo: 

--创建普通索引示例:
CREATE TABLE department10 (
dept_id INT,
dept_name VARCHAR(30),
comment VARCHAR(50),
INDEX index_dept_name (dept_name)
);
--创建唯一索引示例:
CREATE TABLE department11 (
dept_id INT,
dept_name VARCHAR(30),
comment VARCHAR(50),
UNIQUE INDEX index_dept_name (dept_name)
);
--创建全文索引示例:
CREATE TABLE department12 (
dept_id INT,
dept_name VARCHAR(30),
comment VARCHAR(50),
log text, 
FULLTEXT INDEX index_log (log)
);

 

Después de indexación (2) Crear una tabla

sintaxis:

CREATE [UNIQUE | FULLTEXT | SPATIAL ] INDEX 索引名
        ON 表名 |  (字段名[(长度)] [ ASC | DESC ]);


Ejemplo:

--1、创建普通索引示例:
CREATE INDEX index_dept_name ON department (dept_name);

--2、创建唯一索引示例:
CREATE UNIQUE INDEX index_dept_name ON department (dept_name);

--3、创建全文索引示例:
CREATE FULLTEXT INDEX index_dept_name ON department (dept_name);

--4、创建多列索引示例:
CREATE INDEX index_dept_name_comment ON department (dept_name,comment);

 Alter también se puede utilizar para modificar el índice, pero crear suficiente, no voy a alterar un poco menos.

1.4 Índice de Gestión

Ver índice:

show create table 表名\G

Ejemplo de ensayo:

explain select * from department where dept_name='HR';

Eliminar el índice:

show create table employee; --首先查看创建表的结构,知道了索引名才可以删除哦

drop index 索引名 on 表名;

Vamos a hacer una prueba poco para entender la diferencia antes y después de la creación de la consulta al índice:

use company   #进入company数据库
create table t1(id int name ,varchar(50));  #创建一个t1表
delimiter $$   --定义分隔符方便后面创建存储过程
#下面这就是创建存储过程,实现批量插入数据,这个后面我会写博客介绍的,在这里就是实现批量插入数据的功能
create procedure autoinsert() 
begin 
declare i int default 1;
while(i<200000)do  
 insert into company.t1 values(i,'ggg');   
 set i=i+1; 
end while; 
end$$

delimiter ;   #把分隔符修改回来
call autoinsert(); #执行这个函数,开始插入数据
desc t1;  --先查看下表的结构,现在是没有索引的
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  |     | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+

select * from t1 where id =100000;  --注意观察查询时间,0.11s
+--------+------+
| id     | name |
+--------+------+
| 100000 | ggg  |
+--------+------+
1 row in set (0.11 sec)

--用explain查看测试下,竟然查了200242行!没有使用index
explain select * from t1 where id =190000\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 200242
     filtered: 10.00
        Extra: Using where

--开始建立索引进行比对
create index index_id on t1(id);
desc t1;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| id    | int         | YES  | MUL | NULL    |       |
| name  | varchar(50) | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
--查询时间为0!
select * from t1 where id =100000;
+--------+------+
| id     | name |
+--------+------+
| 100000 | ggg  |
+--------+------+
1 row in set (0.00 sec)

--再测试下,它使用了我们建立的索引查询,仅用了一行就查到了
explain select * from t1 where id =190000\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: t1
   partitions: NULL
         type: ref
possible_keys: index_id
          key: index_id
      key_len: 5
          ref: const
         rows: 1
     filtered: 100.00
        Extra: NULL
1 row in set, 1 warning (0.00 sec)

 

Dos, vista MySQL vista

2.1 Ver Perfil

vista MySQL es una tabla virtual, el contenido de la cual se define por la consulta. Con tablas reales, vista contiene una serie de columnas y filas de datos con un nombre. Sin embargo, a la vista no hay un conjunto de valores de datos almacenados en la base de datos . De datos que consta de filas y columnas para definir la tabla referenciada por la vista de consulta, y generan dinámicamente cuando la vista de referencia. Las tablas subyacentes citadas en el mismo, el papel de MySQL vista similar a la de cribado. La detección se puede definir de la vista actual o una pluralidad de otras bases de datos o tablas, u otros puntos de vista. Consulta a través de una vista sin ninguna restricción, y pocas restricciones cuando los datos son modificados por ellos.
         Ver es una consulta SQL almacenada en la base de datos, es principalmente por dos razones: Por razones de seguridad, la vista puede ocultar algunos datos, como por ejemplo: un poco de información sensible, la otra razón es que usted puede hacer consultas complejas fácil de entender y utilizar.
 

2.2 Creación de una vista

语法一:
CREATE [ALGORITHM = {UNDEFINED |MERGE | TEMPTABLE} ]
VIEW 视图名[(字段1,字段2..)]
AS SELECT语句
[WITH [ CASCADED | LOCAL ] CHECK OPTION ];

语法二:
CREATE VIEW 视图名 AS SELECT语句;

(1) En general, se elige la segunda gramática es relativamente simple. Para ver una sola tabla para crear una vista siguiente ejemplo:

create view mysql_user 
    -> as select user,host,authentication_string from mysql.user;

select * from mysql_user;   --就可以直接查看视图,不用敲那么长的语句了
+------------------+-----------+------------------------------------------------------------------------+
| user             | host      | authentication_string                                                  |
+------------------+-----------+------------------------------------------------------------------------+
| mysql.infoschema | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.session    | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| mysql.sys        | localhost | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED |
| root             | localhost | $A$005$M	1#_\Jr5v(ji?qEIdRVMpdu8z0CQEQ2m9OAyJh5Z.uSnn2sJW4xnzTiis0 |
+------------------+-----------+-----------------------------------------------------------

(2) crear un caso de vista de varias tablas

Vamos a crear dos tablas y los datos de inserción, y luego crear la vista.

create table product( id int unsigned auto_increment primary key, name varchar(30) ) not null, price double not null);

create table sale( id int unsigned auto_increment primary key, name varchar(30) not null, quantity int not null default 0, get_time datetime not null);

insert into product(name,price) values ('apple',10), ('banana',2.5), ('peach',4);  
insert into sale(name,quantity,get_time) values
    -> ('apple',100,now()),
    -> ('banana',150,now()),
    -> ('peach',200,now());

Primero con una instrucción de selección para consultar el precio total, pero cada vez que la consulta es muy molesto, es fácil crear una vista de consulta. 

select product.id,product.name,price*quantity as 'total_price' from sale,product where product.name=sale.name;
+----+--------+-------------+
| id | name   | total_price |
+----+--------+-------------+
|  1 | apple  |        1000 |
|  2 | banana |         375 |
|  3 | peach  |         800 |
+----+--------+-------------+

--创建视图
create view total_price as select product.id,product.name,price*quantity as 'total_price' from sale,product where product.name=sale.name;

select * from total_price;
+----+--------+-------------+
| id | name   | total_price |
+----+--------+-------------+
|  1 | apple  |        1000 |
|  2 | banana |         375 |
|  3 | peach  |         800 |
+----+--------+-------------+

Si los dos Insertar tablas de datos, la vista cambiará: 

insert into product(name,price) values ('orange',5);

insert into sale(name,quantity,get_time) values ('orange',120,now());

select * from total_price;
+----+--------+-------------+
| id | name   | total_price |
+----+--------+-------------+
|  1 | apple  |        1000 |
|  2 | banana |         375 |
|  3 | peach  |         800 |
|  4 | orange |         600 |
+----+--------+-------------+

Vista Manager 2.3 (ver, modificar, borrar)

(1) Ver Ver

1.SHOW TABLES;  --查看视图名

2.SHOW TABLE STATUS;
--示例:查看数据库mysq|中视图及所有表详细信息
SHOW TABLE STATUS FROM mysql\G

--示例:查看数据库shop中视图名total_price的详细信息
SHOW TABLE STATUS FROM shop LIKE 'total_price'\G

3.SHOW CREATE VIEW
--示例:查看视图定义信息
SHOW CREATE VIEW total_price\G

4.DESCRIBE
--示例:查看视图结构
DESC total_price;

(2) modificar la vista

--方法一:删除后新创建
DROP VIEW view_user;
CREATE VIEW view_user AS SELECT user,host FROM mysql.user;
SELECT * FROM view_user;

--方法二: ALTER修改视图
ALTER VIEW 视图名 AS SELECT语句; 
ALTER VIEW view_user AS SELECT user,password FROM mysql.user;

(3) Ver Eliminar

--语法
DROP VIEW view_name [,view_name]..;
--示例
USE mysql;
DROP VIEW view_user;


 

 

 

 

 

 

 

 

 

 

Publicado 28 artículos originales · ganado elogios 51 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/Until_U/article/details/105381905
Recomendado
Clasificación