mysql创建索引

加速MySQL的alter table操作

 ̄綄美尐妖づ 提交于 2019-12-02 10:38:54
MySQL的alter table性能在表很大的时候会出现问题。MySQL执行大部分更改操作都是新建一个需要的结构的空表,然后把所有老的数据插入到新表,最后删除旧表。这会耗费很多时间,尤其是在内存紧张,而表很大并有很多索引的时候。 不是所有的alter table操作都会导致重建表。例如,可以通过两种方式创建或去掉列的默认值(一种快、一种慢)。下面是较慢的方式: alter table film modify column rental_duration tinyint(3) not null default 5; 使用show status分析该命令发现,它执行了1001次句柄读取和1000次写入。换句话说,即使列类型、大小和可空性没有变化,它也把表拷贝到了新表中。 flush status; alter table film modify column rental_duration tinyint(3) not null default 5; show session status like 'handle%'; Variable_name Value Handler_commit 2 ...... Handler_read_rnd_next 1001 ...... Handler_write 1000 理论上,MySQL能跳过构建一个新表的方式。列的默认值实际保存在表的

MySQL高级

别等时光非礼了梦想. 提交于 2019-12-02 09:24:13
文章目录 MySQL高级 下载与安装 修改配置文件 设置字符集 mysql架构 连接层 服务层 引擎层 存储层 存储引擎 MyISAM和InnoDB 索引 索引优势 索引劣势 索引分类 基本语法 索引结构 需要创建索引的条件 不需要创建索引的情况 性能分析 MySQL Query Optimizer MySQL常见瓶颈 Explain explain字段解释 索引优化 索引分析 索引失效 注意 查询截取分析 查询优化 order by关键字优化 group by关键字优化 慢查询日志 慢查询日志查看与开启 日志分析工具mysqldumpslow 批量数据脚本 随机产生字符串 随机产生范围数字 存储过程批量插入数据 show profile 分析步骤 全局查询日志 mysql锁机制 锁的分类 三锁(表、行、页) 表锁(偏读) 表锁分析 行锁(偏写) 并发事务处理的问题 事务隔离级别 无索引行锁升级为表锁 间隙锁的危害 如何锁定一行 行锁分析 优化建议 页锁 主从复制 复制基本原理 复制基本规则 一主一从配置 MySQL高级 下载与安装 MySQL下载地址 安装 rpm -ivh MySQL-server-5.5.48-1.linux2.6.x86_64.rpm rpm -ivh MySQL-client-5.5.48-1.linux2.6.x86_64.rpm 修改初始密码 /usr

MySQL 索引的面试题总结

China☆狼群 提交于 2019-12-02 09:18:06
什么是索引? 索引是一种能帮助 MySQL 提高查询效率的数据结构。 索引分别有哪些优点和缺点? 索引的优点如下: 快速访问数据表中的特定信息,提高检索速度。 创建唯一性索引,保证数据表中每一行数据的唯一性。 加速表与表之间的连接。 使用分组和排序进行数据检索时,可以显著减少查询中分组和排序的时间。 索引的缺点: 虽然提高了的查询速度,但却降低了更新表的速度,比如 update、insert,因为更新数据时,MySQL 不仅要更新数据,还要更新索引文件; 建立索引会占用磁盘文件的索引文件。 使用索引注意事项: 使用短索引,短索引不仅可以提高查询速度,更能节省磁盘空间和 I/O 操作; 索引列排序,MySQL 查询只使用一个索引,因此如果 where 子句中已经使用了索引的话,那么 order by 中的列是不会使用索引的,因此数据库默认排序可以符合要求的情况下,不要进行排序操作;尽量不要包含多个列的排序,如果需要最好给这些列创建复合索引; like 语句操作,一般情况下不鼓励使用 like 操作,如果非使用不可, 注意 like “%aaa%” 不会使用索引,而like "aaa%"可以使用索引; 不要在列上进行运算; 不适用 NOT IN 和 <> 操作。 以下 SQL 有什么问题?该如何优化? select * from t where f/2=100; 该 SQL

mysql全文索引

北战南征 提交于 2019-12-02 08:10:17
原文 mysql 全文索引 概念 通过数值比较、范围过滤等就可以完成绝大多数我们需要的查询,但是,如果希望通过关键字的匹配来进行查询过滤,那么就需要基于相似度的查询,而不是原来的精确数值比较。全文索引就是为这种场景设计的。 你可能会说,用 like + % 就可以实现模糊匹配了,为什么还要全文索引? like + % 在文本比较少时是合适的,但是对于大量的文本数据检索,是不可想象的。全文索引在大量的数据面前,能比 like + % 快 N 倍,速度不是一个数量级,但是全文索引可能存在精度问题。 你可能没有注意过全文索引,不过至少应该对一种全文索引技术比较熟悉:各种的搜索引擎。虽然搜索引擎的索引对象是超大量的数据,并且通常其背后都不是关系型数据库,不过全文索引的基本原理是一样的。 版本支持 开始之前,先说一下全文索引的版本、存储引擎、数据类型的支持情况 MySQL 5.6 以前的版本,只有 MyISAM 存储引擎支持全文索引; MySQL 5.6 及以后的版本,MyISAM 和 InnoDB 存储引擎均支持全文索引; 只有字段的数据类型为 char、varchar、text 及其系列才可以建全文索引。 测试或使用全文索引时,要先看一下自己的 MySQL 版本、存储引擎和数据类型是否支持全文索引。 mysql官方文档version:5.7 1.创建全文索引(FullText index

数据库常见面试知识

和自甴很熟 提交于 2019-12-02 08:05:16
数据库常见面试知识 目录 数据库常见面试知识 一 索引 1. 什么是索引? 2. 索引是个什么样的数据结构呢? 3. Hash索引和B+树所有有什么区别或者说优劣呢? 4. 上面提到了B+树在满足聚簇索引和覆盖索引的时候不需要回表查询数据,什么是聚簇索引? 非聚簇索引一定会回表查询吗? 5. 什么是覆盖索引 6. 在建立索引的时候,都有哪些需要考虑的因素呢? 7. 联合索引是什么?为什么需要注意联合索引中的顺序? 8. 创建的索引有没有被使用到?或者说怎么才可以知道这条语句运行很慢的原因? 9. 那么在哪些情况下会发生针对该列创建了索引但是在查询的时候并没有使用呢? 二 事务 1. 什么是事务? 2. ACID是什么?可以详细说一下吗? 3. 同时有多个事务在进行会怎么样呢? 4. 怎么解决这些问题呢?MySQL的事务隔离级别了解吗? 5. Innodb使用的是哪种隔离级别呢? 6. 对MySQL的锁了解吗? 7. MySQL都有哪些锁呢?像上面那样子进行锁定岂不是有点阻碍并发效率了? 三 表结构设计 1. 为什么要尽量设定一个主键? 2. 主键使用自增ID还是UUID? UUID与MD5 md5原理 md5特性 4. md5的用途 5. 一些疑问 3. 字段为什么要求定义为not null? 4. 如果要存储用户的密码散列,应该使用什么字段进行存储? 5

SequoiaDB 3.0 正式发布,分布式OLTP场景实现MySQL协议级兼容

别来无恙 提交于 2019-12-02 08:00:08
SequoiaDB 巨杉数据库 3.0 ,在产品GA发布后,经过近半年在金融级场景的测试、上线和稳定运行之后,于近期正式发布。 1. SequoiaDB 3.0 产品定位 SequoiaDB巨杉数据库是一款金融级分布式数据库,包括了分布式NewSQL、分布式文件系统与对象存储、与高性能NoSQL三种存储模式,分别对应分布式在线交易、非结构化数据和内容管理、以及海量数据管理和高性能访问场景。 根据Gartner的数据库报告,Multi-model多模是未来10年,下一代分布式数据库发展的最主要方向。从1.0的高性能分布式 NoSQL数据库,到2.0加入的分布式对象存储,再到3.0完整协议级兼容MySQL,SequoiaDB经过6年的不断迭代创新,全面支持企业级结构化、半结构化以及非结构化数据存储。 SequoiaDB 3.0 产品维度 2. MySQL 完整协议级兼容 SequoiaDB 3.0实现了100%的MySQL协议级兼容: · 全面兼容:全面支持MySQL协议与语法,用户可以直接使用MySQL客户端或任何管理、开发与监控工具对数据库进行操作; · MySQL语法:由于使用了MySQL原生的解析器,SequoiaDB 3.0 能够实现100%的MySQL语法兼容,支持语法包括基础CRUD操作,多表关联,跨节点事务操作,创建视图,存储过程,索引和访问计划等。 · 无缝切换:

学习笔记

风流意气都作罢 提交于 2019-12-02 07:00:40
第一章数据库的简介 数据库 数据库(dataBase,DB)是指长期存储在计算机内的,有组织,可共享的数据的集合。 数据库中的数据按一定的数学模型组织、描述和存储,具有较小的冗余,较高的数据独立性和易扩展性,并可为各种用户共享。 数据库管理系统软件 数据库管理系统(Database Management System)是一种操纵和管理数据库的大型软件,用于建立、使用和维护数据库,简称DBMS。 它对数据库进行统一的管理和控制,以保证数据库的安全性和完整性。 用户通过DBMS访问数据库中的数据,数据库管理员也通过dbms进行数据库的维护工作。 它可使多个应用程序和用户用不同的方法在同时或不同时刻去建立,修改和询问数据库。 大部分DBMS提供数据定义语言DDL(Data Definition Language)和数据操作语言DML(Data Manipulation Language),供用户定义数据库的模式结构与权限约束,实现对数据的追加、删除等操作。 数据库管理系统是数据库系统的核心,是管理数据库的软件。 数据库管理系统就是实现把用户意义下抽象的逻辑数据处理,转换成为计算机中具体的物理数据处理的软件。 有了数据库管理系统,用户就可以在抽象意义下处理数据,而不必顾及这些数据在计算机中的布局和物理位置。 常见的数据库管理软件:甲骨文的oracle,IBM的db2,sql server,

唯一索引与主键索引的比较

跟風遠走 提交于 2019-12-02 06:52:38
唯一索引与主键索引的比较 唯一索引 唯一索引不允许两行具有相同的索引值。 如果现有数据中存在重复的键值,则大多数数据库都不允许将新创建的唯一索引与表一起保 存。当新数据将使表中的键值重复时,数据库也拒绝接受此数据。 例如,如果在employee 表中的职员姓氏(lname) 列上创建了唯一索引,则所有职员不能同姓。 主键索引 主键索引是唯一索引的特殊类型。 数据库表通常有一列或列组合,其值用来唯一标识表中的每一行。该列称为表的主键。 在数据库关系图中为表定义一个主键将自动创建主键索引,主键索引是唯一索引的特殊类型。 主键索引要求主键中的每个值是唯一的。 当在查询中使用主键索引时,它还允许快速访问数据。 它们的一些比较: (1)对于主健/unique constraint ,oracle/sql server/mysql等都会自动建立唯一索引; (2)主键不一定只包含一个字段,所以如果你在主键的其中一个字段建唯一索引还是必要的; (3)主健可作外健,唯一索引不可; (4)主健不可为空,唯一索引可; (5)主健也可是多个字段的组合; (6)主键与唯一索引不同的是: a.有not null属性; b.每个表只能有一个。 1、主键 主键ID,主键既是约束也是索引,同时也用于对象缓存的键值。 2、索引 *组合或者引用关系的子表(数据量较大的时候),需要在关联主表的列上建立非聚集索引

SQL_STUDY:9.SQL DEFAULT 约束和create index 语句

两盒软妹~` 提交于 2019-12-02 06:42:28
摘要: DEFAULT 约束 create index 语句 SQL DEFAULT 约束 DEFAULT 约束用于向列中插入默认值。 如果没有规定其他的值,那么会将默认值添加到所有的新记录。 SQL DEFAULT Constraint on CREATE TABLE 下面的 SQL 在 “Persons” 表创建时为 “City” 列创建 DEFAULT 约束: My SQL / SQL Server / Oracle / MS Access: CREATE TABLE Persons ( Id_P int NOT NULL , LastName varchar ( 255 ) NOT NULL , FirstName varchar ( 255 ) , Address varchar ( 255 ) , City varchar ( 255 ) DEFAULT 'Sandnes' ) 通过使用类似 GETDATE() 这样的函数,DEFAULT 约束也可以用于 插入系统值 : CREATE TABLE Orders ( Id_O int NOT NULL , OrderNo int NOT NULL , Id_P int , OrderDate date DEFAULT GETDATE ( ) ) SQL DEFAULT Constraint on ALTER TABLE

mysql 索引基本概念

人盡茶涼 提交于 2019-12-02 06:28:51
1. 什么是索引? 索引是一种数据结构,可以帮助我们快速的进行数据的查找. 2. 索引是个什么样的数据结构呢? 索引的数据结构和具体存储引擎的实现有关, 在MySQL中使用较多的索引有Hash索引,B+树索引等,而我们经常使用的InnoDB存储引擎的默认索引实现为:B+树索引. 3. Hash索引和B+树所有有什么区别或者说优劣呢? 首先要知道Hash索引和B+树索引的底层实现原理: hash索引底层就是hash表,进行查找时,调用一次hash函数就可以获取到相应的键值,之后进行回表查询获得实际数据.B+树底层实现是多路平衡查找树.对于每一次的查询都是从根节点出发,查找到叶子节点方可以获得所查键值,然后根据查询判断是否需要回表查询数据. 那么可以看出他们有以下的不同: hash索引进行等值查询更快(一般情况下),但是却无法进行范围查询. 因为在hash索引中经过hash函数建立索引之后,索引的顺序与原顺序无法保持一致,不能支持范围查询.而B+树的的所有节点皆遵循(左节点小于父节点,右节点大于父节点,多叉树也类似),天然支持范围. hash索引不支持使用索引进行排序,原理同上. hash索引不支持模糊查询以及多列索引的最左前缀匹配.原理也是因为hash函数的不可预测. AAAA 和 AAAAB 的索引没有相关性. hash索引任何时候都避免不了回表查询数据,而B+树在符合某些条件