mysql创建索引

MySQL数据库开发的36条原则

戏子无情 提交于 2019-12-04 09:10:12
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/devcloud/article/details/100173405 欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),验证通过后,输入关键字“加群”,加入华为云线上技术讨论群;输入关键字“最新活动”,获取华为云最新特惠促销。华为云诸多技术大咖、特惠活动等你来撩! 前言 这些原则都是经历过实战总结而成 每一条原则背后都是血淋淋的教训 这些原则主要是针对数据库开发人员,在开发过程中务必注意 总是在灾难发生后,才想起容灾的重要性; 总是在吃过亏以后,才记得曾有人提醒过。 一、核心原则 1.尽量不在数据库做运算 俗话说:别让脚趾头想事情,那是脑瓜子的职责 作为数据库开发人员,我们应该让数据库多做她所擅长的事情: 尽量不在数据库做运算 复杂运算移到程序端CPU 尽可能简单应用MYSQL 举例: 在mysql中尽量不要使用如:md5()、Order by Rand()等这类运算函数 2.尽量控制单表数据量 大家都知道单表数据量过大后会影响数据查询效率,严重情况下会导致整个库都卡住 一般情况下,按照一年内单表数据量预估: 纯INT不超过1000W 含CHAR不超过500W 同时要尽量做好合理的分表

数据库查询SQL语句的时候如何写会效率更高?

别来无恙 提交于 2019-12-04 08:30:20
1、sql语句模型结构优化指导 A. ORDER BY + LIMIT组合的索引优化 SELECT [column1],[column2],…. FROM [TABLE] ORDER BY [sort] LIMIT [offset],[LIMIT]; sort上简索引 B. WHERE + ORDER BY + LIMIT组合的索引优化 SELECT [column1],[column2],…. FROM [TABLE] WHERE [columnX] = [VALUE] ORDER BY [sort] LIMIT [offset],[LIMIT]; 建立一个联合索引(columnX,sort) C. WHERE+ORDER BY多个栏位+LIMIT SELECT * FROM [table] WHERE uid=1 ORDER BY x,y LIMIT 0,10; 建立复合索引(uid,x,y) 2、复合索引(形如(x,y,uid)索引的索引) select* from users where area =’beijing’ and age=22; 建立索引(area,age,salary),其相当于创建了(area,age,salary),(area,age),(area)三个索引,这样称为最佳左前缀特性。 3、like语句优化 SELECT id FROM A WHERE

MySQL数据库索引

两盒软妹~` 提交于 2019-12-04 08:01:43
1 索引概述 所有MySQL列类型都可以被索引,对相关列使⽤索引是提⾼SELECT操作性能的最佳途径。 根据存储引擎可以定义每个表的最⼤索引数和最⼤索引长度,每种存储引 擎(如 MyISAM、InnoDB、BDB、MEMORY等)对每个表⾄少⽀持16个索引,总索 引长度⾄少为256字节。⼤多数存储引擎有更⾼的限制。 MyISAM和InnoDB存储引擎的表默认创建的都是BTREE索引。MySQL支持对索引字段的前N个字符创建索引(短索引也叫前缀索引)。前缀索引 的长度跟存储引擎相关,对于MyISAM存储引擎的表,索引的前缀长度可以达到1000 字节长,⽽对于InnoDB存储引擎的表,索引的前缀长度最长是767字节。 MySQL中还支持全文本(FULLTEXT)索引,该索引可以用于全文搜索。但是当前最新版本(5.0)中只有MISQM存储引擎支持FULLTEXT索引。并且只限于CHAR、VARCHAR、TEXT列。索引总是对整列进行的,不支持前缀索引。 默认情况下,MEMORY存储引擎使⽤HASH索引,但也⽀持BTREE索引。 2 设计索引的原则 索引的设计可以遵循⼀些已有的原则,创建索引的时候请尽量考虑符合这些原则,便于提升索引的使⽤效率,更⾼效地使⽤索引。 1:搜索的索引列。最适合索引的列是出现在WHERE⼦句中的列,或连接⼦ 句中指定的列,

数据库

痴心易碎 提交于 2019-12-04 06:35:28
并发事务带来哪些问题? 在典型的应用程序中,多个事务并发运行,经常会操作相同的数据来完成各自的任务(多个用户对同一数据进行操作)。并发虽然是必须的,但可能会导致以下的问题。 脏读(Dirty read): 当一个事务正在访问数据并且对数据进行了修改,而这种修改还没有提交到数据库中,这时另外一个事务也访问了这个数据,然后使用了这个数据。因为这个数据是还没有提交的数据,那么另外一个事务读到的这个数据是“脏数据”,依据“脏数据”所做的操作可能是不正确的。 丢失修改(Lost to modify): 指在一个事务读取一个数据时,另外一个事务也访问了该数据,那么在第一个事务中修改了这个数据后,第二个事务也修改了这个数据。这样第一个事务内的修改结果就被丢失,因此称为丢失修改。 例如:事务1读取某表中的数据A=20,事务2也读取A=20,事务1修改A=A-1,事务2也修改A=A-1,最终结果A=19,事务1的修改被丢失。 不可重复读(Unrepeatableread): 指在一个事务内多次读同一数据。在这个事务还没有结束时,另一个事务也访问该数据。那么,在第一个事务中的两次读数据之间,由于第二个事务的修改导致第一个事务两次读取的数据可能不太一样。这就发生了在一个事务内两次读到的数据是不一样的情况,因此称为不可重复读。 幻读(Phantom read): 幻读与不可重复读类似。它发生在一个事务

MySQL--07 explain用法

雨燕双飞 提交于 2019-12-04 04:56:09
MySQL explain用法 explain命令应用 查询数据的方式 1.全表扫描 1)在explain语句结果中type为ALL 2)什么时候出现全表扫描? 2.1 业务确实要获取所有数据 2.2 不走索引导致的全表扫描 ​ 2.2.1 没索引 ​ 2.2.2 索引创建有问题 ​ 2.2.3 语句有问题 生产中,mysql在使用全表扫描时的性能是极其差的,所以MySQL尽量避免出现全表扫描 2.索引扫描 2.1 常见的索引扫描类型: 1)index 全索引扫描 2)range 范围查询时会达到range级别 3)ref 使用非唯一索引扫描或者唯一索引的前缀扫描 4)eq_ref 5)const 6)system 7)null 从上到下,性能从最差到最好,我们认为至少要达到range级别 一般我们说,只要一条SQL语句,达到range级别,我们会认为索引的效率是OK的 全表扫描: mysql> explain select * from student2; index :全 索引扫描, index与ALL区别为index类型只遍历索引树。 mysql> explain select cno from course; +----+-------------+--------+-------+---------------+---------+---------+------+---

MySQL 索引机制

不问归期 提交于 2019-12-04 03:43:49
MySQL 原理篇 MySQL 索引机制 MySQL 体系结构及存储引擎 MySQL 语句执行过程详解 MySQL 执行计划详解 MySQL InnoDB 缓冲池 MySQL InnoDB 事务 MySQL InnoDB 锁 MySQL InnoDB MVCC MySQL InnoDB 实现高并发原理 MySQL InnoDB 快照读在RR和RC下有何差异 索引是什么? 索引是为了加速对表中数据行的检索而创建的一种分散存储的数据结构。 MySQL 的索引是硬盘级,索引数据是保存在硬盘上的,有部分数据可以放入缓存,后面的文章会描述到, InnerDB 有一个缓存池,缓存池的大小是可以通过配置文件配置。 我们通过下图来看看 MySQL 的索引是怎么工作的? 比如我们建了一张老师表,有 N 条数据,每条数据对应有一个磁盘地址,在没有引入索引机制的情况下,我们要查一条姓名等于王五的数据,我们需要一条一条比对老师表的所有数据,当老师表的数据量比较多时,全表比对检索的速度会非常慢。 这样我们就必须引入索引机制,比如我们对 id 建了一个索引,要查一条 id 等于101的数据,我们可以通过索引的数据结构快速检索出 id 等于101的磁盘地址,这样就可以通过磁盘地址快速定位到表中的数据。 为什么要用索引? 索引能极大的减少存储引擎需要扫描的数据量 索引可以把随机 IO 变成顺序 IO

mysql三-1:存储引擎

为君一笑 提交于 2019-12-04 03:32:45
阅读目录 一 什么是存储引擎 二 mysql支持的存储引擎 三 使用存储引擎 一 什么是存储引擎 mysql中建立的库===>文件夹 库中建立的表===>文件 现实生活中我们用来存储数据的文件有不同的类型,每种文件类型对应各自不同的处理机制:比如处理文本用txt类型,处理表格用excel,处理图片用png等 数据库中的表也应该有不同的类型,表的类型不同,会对应mysql不同的存取机制,表类型又称为存储引擎。 存储引擎说白了就是如何存储数据、如何为存储的数据建立索引和如何更新、查询数据等技术的实现方 法。因为在关系数据库中数据的存储是以表的形式存储的,所以存储引擎也可以称为表类型(即存储和 操作此表的类型) 在Oracle 和SQL Server等数据库中只有一种存储引擎,所有数据存储管理机制都是一样的。而MySql 数据库提供了多种存储引擎。用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据 自己的需要编写自己的存储引擎 SQL 解析器、SQL 优化器、缓冲池、存储引擎等组件在每个数据库中都存在,但不是每 个数据库都有这么多存储引擎。MySQL 的插件式存储引擎可以让存储引擎层的开发人员设 计他们希望的存储层,例如,有的应用需要满足事务的要求,有的应用则不需要对事务有这 么强的要求 ;有的希望数据能持久存储,有的只希望放在内存中,临时并快速地提供对数据 的查询。 二

第八篇:索引原理与慢查询优化

限于喜欢 提交于 2019-12-04 03:31:39
阅读目录 一 介绍 二 索引的原理 三 索引的数据结构 四 聚集索引与辅助索引 五 MySQL索引管理 六 测试索引 七 正确使用索引 八 联合索引与覆盖索引 九 查询优化神器-explain 十 慢查询优化的基本步骤 十一 慢日志管理 一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。 什么是索引? 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构。索引对于良好的性能 非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是对查询性能优化最有效的手段了。索引能够轻易将查询性能提高好几个数量级。 索引相当于字典的音序表,如果要查某个字,如果不使用音序表,则需要从几百页中逐页去查。 30 10 40 5 15 35 66 1 6 11 19 21 39 55 100 你是否对索引存在误解? 索引是应用程序设计和开发的一个重要方面。若索引太多,应用程序的性能可能会受到影响。而索引太少,对查询性能又会产生影响,要找到一个平衡点,这对应用程序的性能至关重要。一些开发人员总是在事后才想起添加索引----我一直认为

快手面试归来篇一,希望你看后能过

僤鯓⒐⒋嵵緔 提交于 2019-12-04 00:27:25
目录 写给正在找工作的你 快手面试 算法 基础 写给正在找工作的你 都说金三银四,对于找工作的人来说,因为每年的三月或四月是不少互联网公司的年终季,不少人都是拿到年终奖后不满意,或者感觉职业发展受限,之后跑路。这样不少部门因为人员流动,就会有hc空缺出来。 ==这里要说的是每年3、4月份确实是hc最多的季节,但同时是跳槽旺季,竞争大,你要想找到好的坑位,那就需要绝对的实力才行。== 相对来说,其实年底是个好时候,俗话说,铁打的营盘流水的兵,互联网的阵地上不少岗位是常年招人,常年缺人,当然hc并不富裕,但是年底的时候,看机会的人也少。毕竟不少人还是很在意“年终奖”的嘛。所以说,年底跳槽你可能会损失一部分年终奖,但换工作的竞争性相对来说也会少很多,竞争的人少了嘛,说不定你就可以凭“运气的实力”脱颖而出呢? 快手面试 算法 面试官很亲切,说Excel表用过吧,Excel表中的编号一般是这样的,A....Z AA...AZ BA...BZ,分别对应数字0...25 26....51 52...77,类比做数字映射,给出一个字符串,求映射的结果。 分析 这个题目其实很基础,可以理解为是以26为基准的进制转换,一个for循环,除了末尾的字符直接加到结果上之外,其他的字符位-'A'+1的结果乘以26*(该字符位置与末尾的差值)。做这种题目一定要先思考,自己手动实现一下。 如果想看具体代码答案

MySQL优化

谁说我不能喝 提交于 2019-12-04 00:05:22
SQL优化背景 开发项目上线初期,由于业务数据量相对较少,一些SQL的执行效率对程序运行效率的影响不太明显,而开发和运维人员也无法判断SQL对程序的运行效率有多大,故很少针对SQL进行专门的优化,而随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必要。 SQL优化发生在业务量达到一定规模的时候 目的是优化SQL的执行效率 MySQL 优化 优化范围 硬件资源 操作系统参数,数据库参数配置 SQL语句,索引优化 SQL优化 数据库设计优化【规范,前期设计】 SQL语句优化 索引优化 读写分离,分库分表 慢查询语句 慢查询:10s无返回结果,定义为慢查询 SHOW STATUS LIKE "slow_queries"; SHOW VARIABLES LIKE "long_query_time";//可以显示当前慢查询时间 set long_query_time=1 ;//可以修改慢查询时间 常用优化方法 查询优化 避免全表扫描(考虑在 where 及 order by 涉及的列上建立索引) 尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描 select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值