mysql创建索引

mySQL高级知识(八)——ORDER BY优化

丶灬走出姿态 提交于 2019-12-13 14:57:20
MySQL高级知识(八)——ORDER BY优化 前言:在使用order by时,经常出现Using filesort,因此对于此类sql语句需尽力优化,使其尽量使用Using index。 0.准备 #1.创建test表。 drop table if exists test; create table test( id int primary key auto_increment, c1 varchar(10), c2 varchar(10), c3 varchar(10), c4 varchar(10), c5 varchar(10) ) ENGINE=INNODB default CHARSET=utf8; insert into test(c1,c2,c3,c4,c5) values('a1','a2','a3','a4','a5'); insert into test(c1,c2,c3,c4,c5) values('b1','b2','b3','b4','b5'); insert into test(c1,c2,c3,c4,c5) values('c1','c2','c3','c4','c5'); insert into test(c1,c2,c3,c4,c5) values('d1','d2','d3','d4','d5'); insert into test(c1

高性能MySQL--总览篇

有些话、适合烂在心里 提交于 2019-12-13 01:00:42
文章为转载: MySQL逻辑架构及性能优化原理   说起MySQL的查询优化,相信所有人都了解一些最简单的技巧:不能使用SELECT *、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要。 MySQL逻辑架构   如果能在头脑中构建一幅MySQL各组件之间如何协同工作的架构图,有助于深入理解MySQL服务器。下图展示了MySQL的逻辑架构图。   MySQL逻辑架构整体分为三层,最上层为客户端层,并非MySQL所独有,诸如:连接处理、授权认证、安全等功能均在这一层处理。   MySQL大多数核心服务均在中间这一层,包括查询解析、分析、优化、缓存、内置函数(比如:时间、数学、加密等函数)。所有的跨存储引擎的功能也在这一层实现:存储过程、触发器、视图等。   最下层为存储引擎,其负责MySQL中的数据存储和提取。和Linux下的文件系统类似,每种存储引擎都有其优势和劣势。中间的服务层通过API与存储引擎通信,这些API接口屏蔽了不同存储引擎间的差异。       每一个客户端发起一个新的请求都由服务器端的连接/线程处理工具负责接收客户端的请求并开辟一个新的内存空间,在服务器端的内存中生成一个新的线程

Mysql安装、配置、优化

妖精的绣舞 提交于 2019-12-13 00:50:45
一: MYSQL安装和基本配置 在linux上安装,可以用包管理工具来安装,比较简单: RedHat 系列:yum -y install mysql mysql-server Debian系列:sudo apt-get install mysql mysql-server 安装之后不知道mysql装到哪了怎么办,用whereis mysql 命令来找一下。 先找到mysql的默认配置文件。一般来说,安装后有这么几个备选的配置: 1 my-huge.cnf my-innodb-heavy-4G.cnf my-large.cnf my-medium.cnf my-small.cnf  就2014年的机器配置来说,咱们直接用my-huge.cnf。把my-huge.cnf 复制到/etc/下,改名my.cnf。配置文件就有了, 然后启动mysql: /etc/init.d/mysqld start 。 安装之后默认的帐号是root, 密码为空。咱们要做的第一件事是改root密码。 进入mysql:mysql -uroot -p 选择数据库: use mysql 改密码: UPDATE user SET Password = PASSWORD(‘xxxx’) WHERE user = ‘root’; 刷新权限: FLUSH PRIVILEGES; 现在数据库装好了, 帐号和权限也设置了

mysql 索引过长1071-max key length is 767 byte

廉价感情. 提交于 2019-12-12 17:03:31
问题 create table: Specified key was too long; max key length is 767 bytes 原因 数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引 而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异) 于是utf8字符编码下,255*3 byte 超过限制 解决 1 使用innodb引擎; 2 启用innodb_large_prefix选项,将约束项扩展至3072byte; 3 重新创建数据库; my.cnf配置: default-storage-engine=INNODB innodb_large_prefix=on 一般情况下不建议使用这么长的索引,对性能有一定影响; 参考文档: https://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html https://www.cnblogs.com/yuyue2014/p/4339090.html https://blog.csdn.net/C_thin/article/details/73252709 来源: 51CTO 作者: 拎壶冲冲冲 链接: https://blog.51cto.com/13120271/2327045

mysql 索引过长1071-max key length is 767 byte

懵懂的女人 提交于 2019-12-12 16:36:52
问题 create table: Specified key was too long; max key length is 767 bytes 原因 数据库表采用utf8编码,其中varchar(255)的column进行了唯一键索引 而mysql默认情况下单个列的索引不能超过767位(不同版本可能存在差异) 于是utf8字符编码下,255*3 byte 超过限制 解决 1 使用innodb引擎; 2 启用innodb_large_prefix选项,将约束项扩展至3072byte; 3 重新创建数据库; my.cnf配置: default-storage-engine=INNODB innodb_large_prefix=on 一般情况下不建议使用这么长的索引,对性能有一定影响; 参考文档: https://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html https://www.cnblogs.com/yuyue2014/p/4339090.html https://blog.csdn.net/C_thin/article/details/73252709 来源: 51CTO 作者: 拎壶冲冲冲 链接: https://blog.51cto.com/13120271/2327045

主键和唯一索引的区别

与世无争的帅哥 提交于 2019-12-12 13:08:19
1、主键 主键ID,可以一列或多列,主键既是约束也是索引且是唯一索引,同时也用于对象缓存的键值。 2、索引 组合或者引用关系的子表(数据量较大的时候),需要在关联主表的列上建立非聚集索引(如订单明细表中的产品ID字段、订单明细表中关联的订单ID字段) 索引键的大小不能超过900个字节,当列表的大小超过900个字节或者若干列的和超过900个字节时,数据库将报错。 表中如果建有大量索引将会影响INSERT、UPDATET、DELETE语句的性能,因为在表中的数据更改时,所有的索引都将必须进行适当的调整。需要避免对经常更新的表进行过多的索引,并且索引应保持较窄,列要尽可能的少。 为经常用于查询的谓词创建索引,如用于下拉参照快速查找的code、name等。在平台现有下拉参照的查询sql语句中的like条件语句要改成不带前置通配符。还有需要关注Order By和Group By谓词的索引设计,Order By和Group By的谓词是需要排序的,某些情况下为Order By和Group By的谓词建立索引,会避免查询时的排序动作。 对于内容基本重复的列,比如只有1和0,禁止建立索引,因为该索引选择性极差,在特定的情况下会误导优化器做出错误的选择,导致查询速度极大下降。 当一个索引有多个列构成时,应注意将选择性强的列放在前面。仅仅前后次序的不同,性能上就可能出现数量级的差异。

MySQL简介

回眸只為那壹抹淺笑 提交于 2019-12-11 19:29:35
一、MySQL简介 1、数据库管理软件分类 主要分为关系型和非关系型。 可以简单的理解为,关系型数据库需要有表结构,非关系型数据库是key-value存储的,没有表结构。 关系型:如sqllite,db2,oracle,access,sql server, MySQL ,注意:sql语句通用。 非关系型:mongodb,redis,memcache 2、MySQL MySQL是一个关系型 数据库管理系统 ,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (关系数据库管理系统) 应用软件。 MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是 开放源码 这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。 MySQL为我们提供开源的安装在各个操作系统上的安装包,包括mac,linux,windows。 二、存储引擎(也称作表类型) MySQL中的数据用各种不同的技术存储在文件(或者内存)中。每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能

mysql总结

只愿长相守 提交于 2019-12-11 18:15:09
1、主从复制 , 2、sql优化 (不用in,count(*),where不用函数,用between and exists等) 3、常见sql的书写 (not exists所有都用(双重not exists)) , group by having ,max(case cid when '1' then grade end)as '科目') 4、索引 B-Tree索引和Hash索引 : hash查找快直接定位值,而B-Tree需要从根到叶子节点 哈希索引没办法利用索引完成排序 哈希索引不支持多列联合索引的最左匹配规则 如果有大量重复键值的情况下,哈希索引的效率会很低,因为存在哈希碰撞问题 https://www.cnblogs.com/zhouguowei/p/9753828.html 聚簇索引和非聚簇索引 :回表,覆盖查询(指一个查询语句的执行只用从索引中就能够取得,不必从数据表中读取。也可以称之为实现了索引覆盖。) (怎么建联合索引时) 最左前缀匹配 :即最左优先,在检索数据时从联合索引的最左边开始匹配。所以当我们创建一个联合索引的时候,如(key1,key2,key3),相当于创建了(key1)、(key1,key2)和(key1,key2,key3)三个索引,这就是最左匹配原则 Mysql5.6的优化:索引下推 (可以在like查询下减少回表查询的次数) select *

《综合》储存引擎,索引类型

夙愿已清 提交于 2019-12-10 16:54:08
《综合》储存引擎,索引类型 MySQL索引创建与删除 MySQL存储引擎的配置 1 MySQL索引创建与删除 1.1 问题 本案例要求熟悉 MySQL索引的类型及操作方法,主要练习以下任务: 普通索引、唯一索引、主键索引的创建 /删除 自增主键索引的创建 /删除 建立员工表 yg、工资表gz,数据内容如表-1、表-2所示,设置外键实现同步更新与同步删除 表 -1 员工表yg的数据 表 -2 工资表gz的数据 1.2 步骤 实现此案例需要按照如下步骤进行。 步骤一:索引的创建与删除 创建表的时候指定 INDEX索引字段 创建库 home: mysql > create database home ; Query OK , 1 row affected ( 0.00 sec ) 允许有多个 INDEX索引字段。比如,以下操作在home库中创建了tea4表,将其中的id、name作为索引字段: mysql > USE home ; Database changed mysql > CREATE TABLE tea4 ( -> id char ( 6 ) NOT NULL , -> name varchar ( 6 ) NOT NULL , -> age int ( 3 ) NOT NULL , -> gender ENUM ( 'boy' , 'girl' ) DEFAULT 'boy'

索引很难么?带你从头到尾捋一遍MySQL索引结构,不信你学不会!

强颜欢笑 提交于 2019-12-10 15:01:05
前言 Hello我又来了,快年底了,作为一个有抱负的码农,我想给自己攒一个年终总结。自上上篇写了 手动搭建Redis集群和MySQL主从同步(非Docker) 和上篇写了 动手实现MySQL读写分离and故障转移 之后,索性这次把数据库中最核心的也是最难搞懂的内容,也就是索引,分享给大家。 这篇博客我会谈谈对于索引结构我自己的看法,以及分享如何从零开始一层一层向上最终理解索引结构。 从一个简单的表开始 create table user( id int primary key, age int, height int, weight int, name varchar(32) )engine = innoDb; 相信只要入门数据库的同学都可以理解这个语句,我们也将从这个最简单的表开始,一步步地理解MySQL的索引结构。 首先,我们往这个表中插入一些数据。 INSERT INTO user(id,age,height,weight,name)VALUES(2,1,2,7,'小吉'); INSERT INTO user(id,age,height,weight,name)VALUES(5,2,1,8,'小尼'); INSERT INTO user(id,age,height,weight,name)VALUES(1,4,3,1,'小泰'); INSERT INTO user(id