索引

mysql中EXPLAIN 的作用

落爺英雄遲暮 提交于 2020-01-30 18:53:50
(一)id列: (1)、id 相同执行顺序由上到下 mysql> explain -> SELECT*FROM tb_order tb1 -> LEFT JOIN tb_product tb2 ON tb1.tb_product_id = tb2.id -> LEFT JOIN tb_user tb3 ON tb1.tb_user_id = tb3.id; +----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+--------+---------------+---------+---------+---------------------------+------+-------+ | 1 | SIMPLE | tb1 | ALL | NULL | NULL | NULL | NULL | 1 | NULL | | 1 | SIMPLE | tb2 | eq_ref |

你在家快疯了?20 道数据库面试解析学起来

人走茶凉 提交于 2020-01-30 15:49:37
面试的时候,发现数据库方面,忘得一塌糊涂,抽时间整理了一些数据库方面的题。 事务四大特性(ACID)原子性、一致性、隔离性、持久性? 事务的并发?事务隔离级别,每个级别会引发什么问题,MySQL 默认是哪个级别? MySQL 常见的三种存储引擎(InnoDB、MyISAM、MEMORY)的区别? MySQL 的 MyISAM 与 InnoDB 两种存储引擎在,事务、锁级别,各自的适用场景? 查询语句不同元素(where、jion、limit、group by、having 等等)执行先后顺序? 什么是临时表,临时表什么时候删除? MySQL B+Tree 索引和 Hash 索引的区别? 聚集索引和非聚集索引区别? 有哪些锁(乐观锁悲观锁),select 时怎么加排它锁? 非关系型数据库和关系型数据库区别,优势比较? 数据库三范式,根据某个场景设计数据表? 数据库的读写分离、主从复制,主从复制分析的 7 个问题? 使用 explain 优化 sql 和索引? MySQL 慢查询怎么解决? 什么是 内连接、外连接、交叉连接、笛卡尔积等? mysql 都有什么锁,死锁判定原理和具体场景,死锁怎么解决? varchar 和 char 的使用场景? mysql 高并发环境解决方案? 数据库崩溃时事务的恢复机制(REDO 日志和 UNDO 日志)? 事务四大特性(ACID)原子性、一致性

python求道06日

余生长醉 提交于 2020-01-30 13:33:42
一. 补充了 python2 和 python3 的区别,具体补充的内容写到前面。 二. 赋值运算指向的是同一个内存空间, is 函数是比较两个数的内存地址 id ( 内容 ) 是测出内容的内存地址 三、小数据池(只有数字类型和字符类型有) 数字类型:值在 -5 到 256 之内都会被放到一个地址里供大家使用,这个供大家使用的地方叫做小数据池。 字符串型的小数据池有以下规则: 字符串里不能含有特殊字符 字符串的字母个数在 20 以下。 四、各种编码方式的位数 注 : 1. 各种编码方式之间的二进制是不能互相识别的,会产生乱码 六、python3大环境下的文件存储过程 bytes类型的中文不易认出,所以尽管它占用内存空间少,但是我们不直接用它 两种数据类型之间的转换用函数 encode 例如: s.encode('utf-8') 七. .isspace函数的使用方法 .issapce()是一个判断 字符串 是否含有空格的函数,其返回值是bool型,有则是ture ,没有则是false 八. 使用for循环删除列表内容时容易犯的错误的产生原因及解决方法 产生原因: 在使用 for 循环中,不可以凭借索引直接删掉列表或者字典里面的内容,这样的话程序会直接报错,因为使用 for 循环时,列表的索引数量会直接先计算出来,然后按照索引来删除列表内容,但是每删除一个列表内容

浅析分布式搜索引擎

被刻印的时光 ゝ 提交于 2020-01-30 08:44:38
1. 基础知识 1.1 认识Lucene Lucene是一套用于 全文检索 和 搜索 的 开放源码程序库 ,由Apache软件基金会支持和提供。Lucene提供了一个简单却强大的应用程序接口,能够做全文索引和搜索,在Java开发环境里Lucene是一个成熟的免费开放源代码工具;就其本身而论,Lucene是现在并且是这几年,最受欢迎的免费Java信息检索程序库。 Lucene官网: http://lucene.apache.org 1.2 倒排索引 在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。例如,文档 1 经过分词,提取了 20 个关键词,每个关键词都会记录它在文档中出现的次数和出现位置。 那么,倒排索引就是 关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。 在搜索引擎中,每个文档都有一个对应的文档 ID,文档内容被表示为一系列关键词的集合。 那么,倒排索引就是 关键词到文档 ID 的映射,每个关键词都对应着一系列的文件,这些文件中都出现了关键词。 DocId Doc 1 谷歌地图之父跳槽 Facebook 2 谷歌地图之父加盟 Facebook 3 谷歌地图创始人拉斯离开谷歌加盟 Facebook 4 谷歌地图之父跳槽 Facebook 与 Wave 项目取消有关 5 谷歌地图之父拉斯加盟社交网站

初学数据库 事务与索引

狂风中的少年 提交于 2020-01-30 07:33:46
6、事务 要么都成功,要么都失败 1、SQL 执行 A 给 B 转账 A 1000 —>200 B 200 2、SQL 执行 B 收到 A 的钱 A 800 —> B 400 一一一一一一 将一组SQL 放在一个批次中去执行~ 事务原则 : ACID 原则 原子性,一致性,隔离性,持久性 (脏读,幻读….) 参考博客连接 : https://blog.csdn.net/dengjili/article/details/82468576 原子性(Atomicity) 要么都成功,要么都失败 一致性(Consistency) 事务前后的数据完整性要保证一致 ,1000 持久性(Durability)— 事务提交 事务一旦提交则不可逆,被持久化到数据库中! 隔离性(Isolation) 事务的隔离性是多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作 数据所干扰,多个并发事务之间要相互隔离。 隔离所导致的一些问题 脏读: 指一个事务读取了另外一个事务未提交的数据。 不可重复读: 在一个事务内读取表中的某一行数据,多次读取结果不同。(这个不一定是错误,只是某些场合不对) 虚读(幻读) 是指在一个事务内读取到了别的事务插入的数据,导致前后读取不一致。 执行事务 -- ==================== 事务 =========================

数据库存储引擎innodb与myisam

怎甘沉沦 提交于 2020-01-30 07:22:40
一、innodb与myisam的区别与取舍、innodb引擎的4大特性 如下是两者的索引图: 两者的 相同点 :两者都是mysql的常用引擎;两者的索引都是B+树 两者的 区别 : 事务:InnoDB支持,MyISAM不支持 外键:InnoDB支持,MyISAM不支持 索引类型:InnoDB是聚簇索引(叶子节点存数据),MyISAM是非聚簇索引(叶子节点存指针) 插入速度:MyISAM批量插入速度快 查询行数:MyISAM的查询性能会比InnoDB强,InnoDB查询表行数要全表扫描,MyISAM存在变量中直接读取 内存空间使用率:InnoDB比MyISAM高 全文索引:MyISAM支持。Innodb不支持,5.7以后才支持 压缩查询:MyISAM表格可以被压缩后进行查询操作 锁级别:InnoDB支持表级锁+(默认)行级锁,而MyISAM支持表级锁 主键:InnoDB必须有,MyISAM可没有 存储文件:Innodb存储文件有frm、ibd,而Myisam是frm、MYD、MYI PS1:InnoDB的 行锁是实现在索引上 的,而不是锁在物理行记录上。潜台词是,如果访问没有命中索引,也无法使用行锁,将要退化为表锁。 举个例子:t_user(uid, uname, age, sex) innodb; uid PrimaryKey,无其他索引 update t_user set age

170309、MySQL存储引擎MyISAM与InnoDB区别总结整理

谁都会走 提交于 2020-01-30 07:10:16
1、MySQL默认存储引擎的变迁 在MySQL 5.1之前的版本中,默认的搜索引擎是MyISAM,从MySQL 5.5之后的版本中,默认的搜索引擎变更为InnoDB。 2、MyISAM与InnoDB存储引擎的主要特点 MyISAM存储引擎的特点是:表级锁、不支持事务和全文索引,适合一些CMS内容管理系统作为后台数据库使用,但是使用大并发、重负荷生产系统上,表锁结构的特性就显得力不从心; 以下是MySQL 5.7 MyISAM存储引擎的版本特性: InnoDB存储引擎的特点是:行级锁、事务安全(ACID兼容)、支持外键、不支持FULLTEXT类型的索引(5.6.4以后版本开始支持FULLTEXT类型的索引)。InnoDB存储引擎提供了具有提交、回滚和崩溃恢复能力的事务安全存储引擎。InnoDB是为处理巨大量时拥有最大性能而设计的。它的CPU效率可能是任何其他基于磁盘的关系数据库引擎所不能匹敌的。 以下是MySQL 5.7 InnoDB存储引擎的版本特性: 注意: InnoDB表的行锁也不是绝对的,假如在执行一个SQL语句时MySQL不能确定要扫描的范围,InnoDB表同样会锁全表,例如 update table set num=1 where name like “a%” 。 两种类型最主要的差别就是InnoDB支持事务处理与外键和行级锁。而MyISAM不支持

MongoDB应用学习

天大地大妈咪最大 提交于 2020-01-30 06:29:29
创建数据库可以直接使用use test 但是这个时候show dbs是看不到的,只有加入了数据才算真正创建了。 collection对应mysql中表的概念 collection中每条数据在生成的时候会自行生成_id的字段 db.pet.find() 相当于select * from pet > db.pet.find() { "_id" : ObjectId("513d489ff596e5c47cf26c28"), "Id" : "1", "Name" : "cat1", "skill" : "2" } db.pet.find(<json>) 代表select * from pet where XXX > db.pet.find({_id : ObjectId("513d489ff596e5c47cf26c28")}) { "_id" : ObjectId("513d489ff596e5c47cf26c28"), "Id" : "1", "Name" : "cat1", "skill" : "2" } db.pet.findOne({'Id': '2'}) 只查找一个 增删改查分别对应 save remove update find/findOne db.currentOp来获取当前操作线程的相关信息 创建索引有两种方法: db.system.indexes.insert(XXX

数据库优化

隐身守侯 提交于 2020-01-30 06:19:09
前面一篇文章从实例的角度进行数据库优化,通过配置一些参数让数据库性能达到最优。但是一些“不好”的SQL也会导致数据库查询变慢,影响业务流程。本文从SQL角度进行数据库优化,提升SQL运行效率。 判断问题SQL 判断SQL是否有问题时可以通过两个表象进行判断: 系统级别表象 CPU消耗严重 IO等待严重 页面响应时间过长 应用的日志出现超时等错误 可以使用sar命令,top命令查看当前系统状态。 也可以通过Prometheus、Grafana等监控工具观察系统状态。(感兴趣的可以翻看我之前的文章) SQL语句表象 冗长 执行时间过长 从全表扫描获取数据 执行计划中的rows、cost很大 冗长的SQL都好理解,一段SQL太长阅读性肯定会差,而且出现问题的频率肯定会更高。更进一步判断SQL问题就得从执行计划入手,如下所示: 执行计划告诉我们本次查询走了全表扫描Type=ALL,rows很大(9950400)基本可以判断这是一段"有味道"的SQL。 获取问题SQL 不同数据库有不同的获取方法,以下为目前主流数据库的慢查询SQL获取工具 MySQL 慢查询日志 测试工具loadrunner Percona公司的ptquery等工具 Oracle AWR报告 测试工具loadrunner等 相关内部视图如v 、 、 、 session_wait等 GRID CONTROL监控工具 达梦数据库

[MySQL]Query的性能优化分析(二)

北慕城南 提交于 2020-01-30 04:33:24
MySQL Query Optimizer MySQL Query Optimizer是MySQL中专门负责优化SELECT语句的模块,其主要功能是:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供MySQL认为最优的执行计划 1 。 优化器执行过程: 客户端向MySQL发起Query请求; 命令解析器模块完成请求分类,区别出SELECT并转发给MySQL Query Optimizer(查询优化器); 查询优化器对整条Query进行优化,处理掉一些常量表达式的预算,直接换算成常量值; 查询优化器对Query中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等; 分析Query中是否有Hint消息,是否可以通过Hint信息完全确定该Query的执行计划; 若没有Hint信息或不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据Query进行写相应的计算分析,得出最后的执行计划。 查看执行计划:Explain Explain的作用 使用EXPLAIN关键字可以通过模拟优化器执行SQL查询语句了解MySQL是如何处理SQL语句,从而分析查询语句或是表结构中的性能瓶颈。 使用Explain可以了解到: 表的读取顺序:通过执行计划中的id判断 数据读取操作的操作类型:通过执行计划中的select_type判断 哪些索引可以使用