mysql创建索引

MySQL 的架构与组件

喜欢而已 提交于 2019-11-29 06:52:05
MySQL 的逻辑架构图设计图 连接/线程处理: 管理客户端连接/会话[mysql threads] 解析器: 通过检查SQL查询中的每个字符来检查SQL语法,并 为每个SQL查询 生成 SQL_ID 。 此外,身份验证检查(用户凭据)将在此阶段发生。 优化程序: 根据存储引擎创建有效的查询执行计划。 它将重写一个查询。 示例:InnoDB具有共享缓冲区,因此优化器将从中获取预缓存的数据。 使用表统计信息优化器将为SQL查询生成执行计划。 授权检查(用户访问权限)将在此阶段发生。 元数据缓存: 缓存对象元数据信息和统计信息。 查询缓存: 来自内存的共享相同查询。如果在查询缓存中找到来自客户端的相同查询,则MySQL服务器从查询缓存中检索结果,而不是再次解析和执行该查询。 它是会话的共享缓存,因此可以发送一个客户端生成的结果集以响应另一个客户端发出的相同查询。 查询缓存基于 SQL_ID .SELECT数据进入视图是使用查询缓存预缓存数据的最佳示例。 密钥缓存: 缓存表索引。在 MySQL 中密钥是索引(在oracle密钥是约束),如果索引大小小,那么它将缓存索引结构和数据叶。如果索引很大,那么它将只缓存索引结构。由MyISAM 使用存储引擎。 存储引擎: 管理物理数据(文件管理)和位置的MySQL组件。 存储引擎负责执行SQL语句并从数据文件中获取数据。 用作插件

Mysql Explain 详细解释

ε祈祈猫儿з 提交于 2019-11-29 06:48:02
一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二.explain输出解释 +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ 1.id 我的理解是SQL执行的顺利的标识,SQL从大到小的执行. 例如: mysql> explain select * from (select * from ( select * from t3 where id=3952602) a) b; +----+-------------+------------+--------+-------------------+---------+---------+------+------+-

MongoDB基本查询

心已入冬 提交于 2019-11-29 04:15:01
1 查询操作 2 1、查询所有记录 3 db.userInfo.find(); 4 相当于: 5 select* from userInfo; 6 7 2、查询去掉后的当前聚集集合中的某列的重复数据 8 db.userInfo.distinct("name"); 9 会过滤掉name中的相同数据 10 相当于: 11 select disttince name from userInfo; 12 13 3、查询age = 22的记录 14 db.userInfo.find({"age": 22}); 15 相当于: 16 select * from userInfo where age = 22; 17 18 4、查询age > 22的记录 19 db.userInfo.find({age: {$gt: 22}}); 20 相当于: 21 select * from userInfo where age >22; 22 23 5、查询age < 22的记录 24 select * from userInfo where age <22; 25 26 6、查询age >= 25的记录 27 db.userInfo.find({age: {$gte: 25}}); 28 相当于: 29 select * from userInfo where age >= 25; 30 31 7

MYSQL性能调优

允我心安 提交于 2019-11-29 03:43:32
摘要 为了学习研究MySQL数据库在工作原理,深刻理解MySQL在企业运用时如何保证其高效运行。分别从表结构的优化,SQL语句的优化,存储引擎的选择,索引的优化以及现今MySQL的发展与其他企业级数据库的比较。介绍了从编码选择到数据类型的选择以及从整体的角度设计表结构。在SQL语句的选择和使用的介绍的时候,深入介绍了一些基本的使用原则以及在一般在使用过程中我们存在的误区以及如何解决这些问题。着重介绍了MySQL的几个存储引擎MyISAM、InnoDB和NDBCluster的差异以及各自的适用范围。有介绍了MySQL的索引的一些优化的建议以及高屋建瓴地阐述和比较了MySQL的优劣和发展态势。 前言 数据库作为应用作为广泛,地位极为重要的中间件应用,学习和使用数据库管理系统变得越来越重要。为了研究和总结对mysql数据库的学习结果,特别从数据表结构、sql语句优化、存储引擎的选择、索引的应用、以及mysql的比较总结对mysql技术做了一个比较全面升入的介绍。使用mysql的过程中,如何更好地使用与优化越来越重要,在这篇文章中就阐述。 第一章 表结构的优化 数据表是数据库的具体表现形式,设计优良的数据库拥有良好的表结构,者不单单指数据库的表需要满足范式结构,为了更有利于具体操作,表结构还需要实际的可扩展性,以便于做增删改查,又需要根据数据表的具体作用做出调节

mysql 之索引

余生长醉 提交于 2019-11-29 01:57:29
索引是为了提高数据库查询的速度,索引由表中的一个字段或多个字段生成的键组成。索引存储在数据结构中,通过mysql可以快速有效的查找与键值相关的字段。根据索引的存储类型,索引可以分为B树形索引(BTREE)和哈希索引(HASH)。InnoDB 和 MyISAM存储引擎支持BTREE类型索引,MEMORY存储引擎支持HASH类型索引.mysql支持6中索引,分别为普通索引,唯一索引,全文索引,单列索引,多列索引和空间索引。 创建普通索引 索引的创建: (1)在创建表的时候创建索引 INDEXT| KEY [索引名] (字段名 长度 asc|desc) (2)表创建之后创建索引 a. CREATE INDEX index_name ON table_name(字段名) b. ALERT TABLE table_name ADD INDEX indexd_name(字段名) 查看索引: a. show create table table_name \G b. show index from table_name \G 创建唯一索引 索引的创建: (1)在创建表的时候创建索引 UNIQUE INDEXT| KEY [索引名] (字段名 长度 asc|desc) (2)表创建之后创建索引 a. CREATE UNIQUE INDEX index_name ON table_name(字段名)

mysql(普通索引-单列索引)

让人想犯罪 __ 提交于 2019-11-29 01:56:15
普通索引命名规则 一般性索引用ind_开头,后面跟字段名 demo sql CREATE TABLE ` test3 ` ( ` id ` int ( 10 ) NOT NULL AUTO_INCREMENT , ` name ` varchar ( 255 ) NOT NULL , ` phone ` char ( 11 ) NOT NULL , PRIMARY KEY ( ` id ` ) ) ENGINE = InnoDB AUTO_INCREMENT = 840632 DEFAULT CHARSET = utf8 ; 创建表之前索引(对比demo sql) CREATE TABLE ` test3 ` ( ` id ` int ( 10 ) NOT NULL AUTO_INCREMENT , ` name ` varchar ( 255 ) NOT NULL , ` phone ` char ( 11 ) NOT NULL , PRIMARY KEY ( ` id ` ) , KEY ` ind_name ` ( ` name ` ) #多的一行 ) ENGINE = InnoDB AUTO_INCREMENT = 840630 DEFAULT CHARSET = utf8 ; 建表之后加索引 #CREATE INDEX 创建普通索引(固定) #ind_name 索引名称

【MySQL】深入了解 InnoDB中的聚集索引和辅助索引(B+树索引)

若如初见. 提交于 2019-11-29 01:55:46
文章目录 1. B+ 树索引分类 1.1 聚集索引 1.2 辅助索引 2. 使用 2.1 联合索引 2.2 覆盖索引 2.3 优化器选择不适用索引:全表扫描 1. B+ 树索引分类 1.1 聚集索引   按照每张表的主键构成一棵B+树, 叶子节点中存放整张表的行记录数据 ,也将聚集索引的叶子节点成为数据页,每个数据页之间通过一个双向链表来进行链接。数据页存放的是每行的所有记录,非数据页存放的是键值和指向数据页的偏移量。张表只能有一个聚集索引 可以在叶子节点直接找到数据 对于主键的排序查找和范围查找速度非常快,因为聚集索引是逻辑上连续的。比如查询后10条数据,由于B+树索引是双向链表,可以很快找到随后一个数据页,然后取出最后的10条数据 1.2 辅助索引   也称 非聚集索引,按照每张表创建的索引列创建一棵B+树, 叶子节点并不包含行记录的全部数据 。叶子节点包含键值 和 书签,书签用来告诉InnoDB存储引擎在哪可以找到与索引对应的行数据,通常是襄阳行数据的聚集索引键。每张表可以有多个辅助索引   如果某个查询是通过辅助索引查找数据的,则查找过程为: 先遍历辅助索引并找到叶节点找到指针获取主键索引的主键,然后通过主键索引找到对应的页从而找到一个完整的行记录。 注:没执行一次查询就是一次IO,比如 辅助索引树高度为3,聚集索引树高度为2,则通过辅助索引查询数据时就要进行3

MySQL语言分类——DDL

只愿长相守 提交于 2019-11-29 01:55:23
DDL的全称Data Definition Language,即数据定义语言   DDL的语法有:create、alter、drop、rename、truncate。对此做一个详细的解释: create (创建)   create 可以创建数据库 # 创建数据库 create database database_name; # 然后进入该数据库 use database_name;   create 可以创建表格     创建表格的语法:方括号的表示可以省略       create [temporary] table [if not exits] table_name(         column_name data_type [not null | null] [default default_value] [auto_increment] [Constraints约束条件],       );     [if not exits] 如果新建表不存在,则会创建新表;如果存在,不会报错,数据也不会被覆盖 create table if not exits table_name( id int, name varchar(20) );     [temporary] 创建临时表 用于存储临时计算的数据,生命周期只限于本次连接 create temporary table

Mysql中InnoDB存储引擎索引

风格不统一 提交于 2019-11-29 01:55:08
1.索引是什么: 索引用于快速找出在某个列中有某一特定值的行。 2.索引的优缺点: 优点:索引能够有效地提高查询的效率; 缺点:索引过多也会影响应用程序的性能。 3.索引的分类: 按索引包含列的个数可以分为 (1)单列索引(一个索引只包含一个列,但一个表可以有多个单列索引) (2)组合索引(一个组合索引包含两个或者两个以上的列) 只有在查询条件中使用了这些字段的左边字段时,索引才会被使用,使用组合索引时遵循最左前缀集合。 我们创建一张menu表 CREATE TABLE `menu` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '菜单id', `sid` bigint(20) DEFAULT NULL COMMENT '系统id', `name` varchar(255) DEFAULT NULL COMMENT '菜单名', `pid` bigint(20) DEFAULT NULL COMMENT '父菜单', `type` tinyint(4) DEFAULT NULL COMMENT '类型(1:一级菜单 2:二级菜单)', `url` varchar(255) DEFAULT NULL COMMENT '菜单url', `sort` int(11) DEFAULT NULL COMMENT '排序', PRIMARY

innodb表的聚集索引和普通索引的区别(从数据存储角度),组合索引和单列索引的区别.

自古美人都是妖i 提交于 2019-11-29 01:54:14
innodb 聚集索引和普通索引 Innodb 聚集索引是按照主键(primarykey)进行聚集,被索引的列其实是主键列,如果没定义主键,Innodb会试着使用唯一非空索引Unique Index来代替,如果还找不到,Innodb就会定义隐藏主键然后在上面进行索引聚集。出了主键的聚集索引,其他索引(普通索引)中不会保存行的物理位置,而是保存主键的值,所以通过"二级索引"进行查找是先找到主键,再找到行,要进行二次索引查找。 组合索引和单列索引 组合索引在多列上创建,单列索引在一个列上创建。 查询使用索引的条件不同一般组合索引需要按照“最左前缀”来执行查询,并不是每个列都需要覆盖,只是从左边的列开始组合。 例如有索引key(a,b,c) where a=xx and b=xx and c=xxx 此语句可以用到索引 where b=xx and a=xx and c=xxx 同上,顺序没有关系,同样能用到索引 where a=xx and b=xx 可以用到索引 where a=xx and c=xx 可以用到索引 where b=xx and c=xx 用不到索引 where b=xx 用不到索引 where c=xx 用不到索引 在性能方面,如果查询既能满足单列索引,又能满足多列索引,那么通过组合索引能够加快查询的速度