数据库
文章平均质量分 82
ScratKong
劝君惜取少年时
展开
-
Redis 主从读写分离与集群
搭建主从为啥要有主从?网站的读写比率为 10:1,为提高网站性能,采用主从分离的技术可以实现有针对的性能优化。配置主sudo vi redis.conf bind XXX.XXX.XXX.XXX重启redissudo service redis stop redis-server redis.conf配置从复制redis.conf文件 ,重命名为sl...转载 2018-08-11 08:39:56 · 1225 阅读 · 0 评论 -
外键列上是否需要索引
外键列上是否需要索引 其实这个问题应该算是老生常谈了。这两天看concept看到这里,于是就在说说这个问题。外键列上缺少索引会带来两个问题,限制并发性、影响性能。而这两个问题中的任意一个都可能会造成严重性能问题。无论是Oracle的官方文档,还是在Tom的书中都说明了两种情况下可以忽略外键上的索引。其实我认为不需要那么麻烦,与增加一个索引所带来的性能开销和磁盘空间开销相比,...转载 2019-03-01 14:54:36 · 335 阅读 · 0 评论 -
外键必须是另一个表的主键吗
不一定是主键,但必须是唯一性索引。 主键约束和唯一性约束都是唯一性索引。 FOREIGN KEY 约束SQL Server 2008其他版本外键 (FK) 是用于建立和加强两个表数据之间的链接的一列或多列。当创建或修改表时可通过定义 FOREIGN KEY 约束来创建外键。在外键引用中,当一个表的列被引用作为另一个表的主键值的列时,就在两表之间创建了链接。这...转载 2019-03-01 14:48:49 · 12249 阅读 · 1 评论 -
MySQL存储引擎分析
什么是存储引擎?MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能,从而改善你的应用的整体功能。这些不同的技术以及配套的相关功能在MySQL中被称作存储引擎(也称作表类型)。MySQL默认配置了许多不同的存储引擎,可以预先设置或者在M...转载 2019-03-01 11:20:21 · 339 阅读 · 0 评论 -
键、索引、约束及其区别
一.索引1. 什么是索引?索引是对数据库表中一列或多列的值进行排序的一种结构。在关系型数据库中,索引是一种与表有关的数据库结构,是事实存在的。它可以使对于表的select等等操作更加快速,相当于一本书的目录。对于一张表,如果我们想要找到某一列符合特定值的记录,第一种方法是全表搜索匹配,然后把所有符合的记录列出,但这样做会消耗大量数据库系统时间,并造成大量磁盘I/O操...转载 2018-12-30 10:20:08 · 501 阅读 · 0 评论 -
MySQL使用全文索引(fulltext index)
1.创建全文索引(FullText index) 旧版的MySQL的全文索引只能用在MyISAM表格的char、varchar和text的字段上。 不过新版的MySQL5.6.24上InnoDB引擎也加入了全文索引,所以具体信息要随时关注官网, 1.1. 创建表的同时创建全文索引 CREATE TABLE article...转载 2018-12-24 19:28:11 · 254 阅读 · 0 评论 -
Redis的事务和watch
redis的事务严格意义来讲, redis的事务和我们理解的传统数据库(如mysql)的事务是不一样的。redis中的事务定义Redis中的事务(transaction)是一组命令的集合。事务同命令一样都是Redis的最小执行单位,一个事务中的命令要么都执行,要么都不执行。事务的原理是先将属于一个事务的命令发送给Redis,然后再让Redis依次执行这些命令。Redis保证...转载 2018-12-29 17:09:07 · 261 阅读 · 0 评论 -
数据库索引为什么使用B+树?
概述B tree: 二叉树(Binary tree),每个节点只能存储一个数。B-tree:B树(B-Tree,并不是B“减”树,横杠为连接符,容易被误导)B树属于多叉树又名平衡多路查找树。每个节点可以多个数(由磁盘大小决定)。B+tree 和 B*tree 都是 B-tree的变种索引为什么是用B树呢?一般来说,索引本身也很大,不可能全部存储在内存中,因此索引往往以索引文件的形式存...转载 2018-12-24 15:41:04 · 248 阅读 · 0 评论 -
分表、分库、分片和分区
一、Sharding(分片)Sharding 是把数据库横向扩展(Scale Out)到多个物理节点上的一种有效的方式,其主要目的是为突破单节点数据库服务器的 I/O 能力限制,解决数据库扩展性问题。Shard这个词的意思是“碎片”。如果将一个数据库当作一块大玻璃,将这块玻璃打碎,那么每一小块都称为数据库的碎片(DatabaseShard)。将整个数据库打碎的过程就叫做sharding,可以翻...转载 2018-12-10 22:22:37 · 829 阅读 · 0 评论 -
MySQL日志
mysql日志的种类,一般来说,日志有五种,分别为:错误日志:-log-err (记录启动,运行,停止mysql时出现的信息)二进制日志:-log-bin (记录所有更改数据的语句,还用于复制,恢复数据库用)查询日志:-log (记录建立的客户端连接和执行的语句)慢查询日志: -log-slow-queries (记录所有执行超过long_query_time秒的所有查询)更新...转载 2019-03-01 21:16:10 · 236 阅读 · 0 评论 -
MySQL触发器trigger的使用
Q:什么是触发器?A:触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的特性: 1、有begin end体,begin end;之间的语句可以写的简单或者复杂 2、什么条件会触发:I、D、U 3、什么时候触发:在增删改前或者后 4、触发频率:针对每一行执行 5、触发器定义在表上,附着在表上。也就是由事件来触发某个...转载 2019-03-04 09:47:38 · 258 阅读 · 0 评论 -
如果有人问你数据库的原理,看这篇文章。(超长预警)
长文,相当的通透。以下为scrat进行总结后的删减版。下面假定你已经知道时间复杂度关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata 。但很少有文章讲解数据库是如何工作的。作为一个开发人员,我不喜欢用我不明白的东西。数据库已经使用了40年之久,一定有理由的。关系型数据库非常有趣,因为它们是基于实用而且可复用的概念。如果你对了解一个数据库...翻译 2019-08-28 17:00:32 · 1211 阅读 · 2 评论 -
Ubuntu MySQL安装、初始密码修改
转自:https://www.cnblogs.com/roadofstudy/p/7446690.html最近在ubuntu系统上安装了MySQL,但是安装时没有提示输入root用户密码,在网上找了一天解决方案,试图修改root用户下的登入密码,但是网上的帖子都不凑效,最后终于改成功了,因此记下来以供有同样需要的人参考。1、安装$ sudo apt-get install mysql...转载 2019-07-09 21:32:09 · 441 阅读 · 0 评论 -
SQL优化30条
一、基础规范(1)必须使用InnoDB存储引擎解读:支持事务、行级锁、并发性能更好、CPU及内存缓存页优化使得资源利用率更高(2)必须使用UTF8字符集解读:万国码,无需转码,无乱码风险,节省空间(3)数据表、数据字段必须加入中文注释解读:N年后谁tm知道这个r1,r2,r3字段是干嘛的(4)禁止使用存储过程、视图、触发器、Event解读:高...转载 2019-05-18 15:16:41 · 372 阅读 · 0 评论 -
Ubuntu 安装Mysql
1.安装ubuntu上安装mysql非常简单只需要几条命令就可以完成。 1.sudo apt-get install mysql-server 2. sudo apt-get install mysql-client 3. sudo apt-get install libmysqlclient-dev安装过程中会提示设置密码什么的(如果没有提示你设置密码,看这里...转载 2019-04-26 21:58:58 · 3388 阅读 · 0 评论 -
drop,delete与truncate的区别(删除表的方式,哪个快)
drop直接删掉表 truncate删除表中数据,再插入时自增长id又从1开始 delete删除表中数据,可以加where字句。用TRUNCATE替代DELETETRUNCATE不记录日志,DELETE记录日志,所以TRUNCATE要快于DELETE但是一旦用TRUNCATE进行删除就不能进行恢复, TRUNCATE是删除整张表的数据不能加where条件。(1) DELE...转载 2019-03-22 16:09:38 · 1179 阅读 · 0 评论 -
SQL中IN和EXISTS用法的区别
结论1. in()适合B表比A表数据小的情况2. exists()适合B表比A表数据大的情况当A表数据与B表数据一样大时,in与exists效率差不多,可任选一个使用.select * from Awhere id in(select id from B)以上查询使用了in语句,in()只执行一次,它查出B表中的所有id字段并缓存起来.之后,检查A表的id是否与B表中的id相...转载 2019-03-22 14:14:41 · 209 阅读 · 0 评论 -
跳跃表原理
最近看了一种数据结构叫做skipList,redis和levelDB都是用了它。Skip List是在有序链表的基础上进行了扩展,解决了有序链表结构查找特定值困难的问题,查找特定值的时间复杂度为O(logn),他是一种可以代替平衡树的数据结构。源地址:http://kenby.iteye.com/blog/1187303为什么选择跳表目前经常使用的平衡数据结构有:B树...转载 2019-03-16 21:54:04 · 262 阅读 · 0 评论 -
MySQL中char与varchar区别,varchar最大长度是多少?
一、首先来说下字符与字节的区别:字符与字节它们完全不是一个位面的概念,所以两者之间没有“区别”这一说法。在不同编码里,字符和字节的对应关系是不同的。一般来说,半角英文状态下一个字母或数字(称之为字符)占用一个字节,一个汉字用两个字节表示。在不同的编码方式下一个字符占的字节数是不同的,所以两者是不能划等号的。 1个字节(Byte)等于8个bit位,每个bit位是0/1两种状态,也就是说一个...转载 2019-03-04 21:25:56 · 478 阅读 · 0 评论 -
SQL之case when then用法
case具有两种格式。简单case函数和case搜索函数。--简单case函数case sex when '1' then '男' when '2' then '女’ else '其他' end--case搜索函数case when sex = '1' then '男' when sex = '2' then '女' ...转载 2018-12-27 09:25:51 · 362 阅读 · 0 评论 -
SQL里的count(*)、count(1)、count(column_name)的区别
1、主要区别1)count(*)所有行进行统计,包含值为null的行。2)count(column)会对指定列具有的行数进行统计,除去值为NULL的行。3)count(1)与count(*) 的效果是一样的。 2、性能问题1)In any case,SELECT COUNT(*) FROM tablename is the best choice.2)尽量减少SELECT...转载 2018-12-26 21:40:13 · 234 阅读 · 0 评论 -
聊聊分布式事务,再说说解决方案
前言分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在微服务架构中,几乎可以说是无法避免,本文就分布式事务来简单聊一下。数据库事务在说分布式事务之前,我们先从数据库事务说起。 数据库事务可能大家都很熟悉,在开发过程中也会经常使用到。但是即使如此,可能对于一些细节问题,很多人仍然不清楚。比如很多人都知道数据库事务的几个特性:原子性(Atomic...转载 2018-12-12 17:33:43 · 203 阅读 · 0 评论 -
Python 操作 MySQL
Python 操作Mysql的流程图如下:引入模块在py文件中引入pymysql模块from pymysql import *Connection 对象 用于建立与数据库的连接 创建对象:调用connect()方法 conn=connect(参数列表)参数host:连接的mysql主机,如果本机是'localhost' 参数port:连接的...转载 2018-10-11 17:25:49 · 254 阅读 · 0 评论 -
SQL查询中in和exists的区别分析
首先:select * from A where id in (select id from B);select * from A where exists (select 1 from B where A.id=B.id);对于以上两种情况,in是在内存里遍历比较,而exists需要查询数据库,所以当B表数据量较大时,exists效率优于in。 1、IN()语句内部工作原...转载 2018-10-01 17:10:28 · 207 阅读 · 0 评论 -
MySQL数据库(二)数据完整性
数据完整性一个数据库就是一个完整的业务单元,可以包含多张表,数据被存储在表中。 在表中为了更加准确的存储数据,保证数据的正确有效,可以在创建表的时候,为表添加一些强制性的验证,包括数据字段的类型、约束。数据类型可以通过查看帮助文档查阅所有支持的数据类型 使用数据类型的原则是:够用就行,尽量使用取值范围小的,而不用大的,这样可以更多的节省存储空间 常用数据类型如下: 整数:int,...转载 2018-08-10 13:31:12 · 426 阅读 · 0 评论 -
MySQL分页
第一部分:看一下分页的基本原理:mysql explain SELECT * FROM message ORDER BY id DESC LIMIT 10000, 20***************** 1. row **************id: 1select_type: SIMPLEtable: messagetype: indexpossible_keys: NULL...转载 2018-09-14 21:13:00 · 196 阅读 · 0 评论 -
慢查询及其成因与处理方法
一、什么是慢查询?分析MySQL语句查询性能的方法除了使用 EXPLAIN 输出执行计划,还可以让MySQL记录下查询超过指定时间long_query_time参数的语句,我们将超过指定时间的SQL语句查询称为“慢查询”。慢查询日志:记录这些超时SQL的日志。二、记录慢查询的方法:查看/设置“慢查询”的时间定义 1 2 3 4 5...转载 2018-09-14 20:41:41 · 1672 阅读 · 0 评论 -
MySQL索引原理以及查询优化
一、介绍由来: 一般的应用系统,读写比例在10:1左右,插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。说起加速查询,就不得不提到索引了。 索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要。 索引优化应该是...转载 2018-09-10 10:34:07 · 282 阅读 · 0 评论 -
Redis简介、基本操作
一、Redis简介Redis是一个开源的高性能键值对NoSQL数据库(C语言开发,开源)。提供多种键值数据类型来适应不同场景下的数据存储需求,并借助许多高层级的接口使其可以胜任诸如缓存、队列系统等不同角色。NoSQL:一类新出现的数据库(not only sql)泛指非关系型的数据库 不支持SQL语法 存储结构跟传统关系型数据库中的那种关系表完全不同,nosql中存储的数据...原创 2018-08-30 14:39:52 · 525 阅读 · 0 评论 -
数据表设计思想,ER图及三范式。
数据表设计思想设计流程需求分析:根据用户的需求,分析出需要记录的数据需求设计:根据分析出的数据,设计E-R模型图详细设计:将E-R模型图转换成数据表三大范式:使用数据库三大范式的设计思想对数据表进行审核E-R模型图概念:Entity-Relationship,实体关系图组成元素:举例,将下面三张表用E-R模型图表示出来三大范式概念:三大...转载 2018-09-04 16:04:23 · 15335 阅读 · 1 评论 -
使用pymysql对数据进行增删改查
什么是 PyMySQL?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。1、安装pymysql pip3 install PyMySQL2、pymysql执行流程3、引入...原创 2018-09-04 15:53:59 · 3013 阅读 · 0 评论 -
MySQL之视图、事务
视图问题:如果我有一个很复杂的sql语句,但是我还会经常使用该怎么办?概念:视图是一个虚拟表。 视图同样跟真实表一样包含行和列,但是视图没有在数据库中真实的存储数据 视图中行和列的数据都来自于其引用的真实表中行和列的数据好处:安全性 方便操作,减少编写复杂的重复的sql语句 易于扩展例:a表、b表删除,使用c表定义视图:create view 视图名称 ...原创 2018-09-04 15:38:58 · 228 阅读 · 0 评论 -
Redis持久化
持久化(persistence)本文档翻译自 http://redis.io/topics/persistence 。这篇文章提供了 Redis 持久化的技术性描述, 推荐所有 Redis 用户阅读。要更广泛地了解 Redis 持久化, 以及这种持久化所保证的耐久性(durability), 请参考文章 Redis persistence demystified (中文)。 R...转载 2018-10-11 20:16:01 · 251 阅读 · 0 评论 -
数据库服务器性能剖析(思路梳理)
最常见的三个性能相关问题;如何确认服务器是否达到了性能最佳的状态。 某条语句为什么执行的不够快。 如何诊断被用户描述成停顿、堆积、或者卡死的某些间歇性疑难故障。性能常见指标每秒查询次数。 CPU利用率。 可扩展性。性能定义;完成某件任务所需要的时间度量,或者说,性能即响应时间。性能的优化; 在一定的工作负载下尽可能的降低响应时间。注意;CPU利用率并不是很好的度量性能的...转载 2018-12-02 16:01:55 · 255 阅读 · 0 评论 -
redis应用场景
毫无疑问,Redis开创了一种新的数据存储思路,使用Redis,我们不用在面对功能单调的数据库时,把精力放在如何把大象放进冰箱这样的问题上,而是利用Redis灵活多变的数据结构和数据操作,为不同的大象构建不同的冰箱。希望你喜欢这个比喻。一、Redis常用数据类型Redis最为常用的数据类型主要有以下五种:String Hash List Set Sorted set...转载 2018-11-23 12:48:04 · 141 阅读 · 0 评论 -
为什么有了事务还需要乐观锁和悲观锁?
为什么有了事务这东西,还需要乐观锁悲观锁?首先,事务是粗粒度的概念、乐观锁悲观锁可以更细粒度的控制。怎么理解呢?举个例子:比如抢票,假设余票只有1张;隔离级别可以保证事务A和事务B不能读到对方的数据,也不能更新对方正在更新的数据,但是事务A和事务B都认为还有1张余票,于是出票,并更新为0;事务解决了并发问题,已经不存在并发问题了;但是事务B读取的是过时数据,依据过时数据做了...转载 2018-11-24 22:36:05 · 1270 阅读 · 1 评论 -
主键约束和唯一性约束的区别
1.主键约束(PRIMARY KEY)1) 主键用于唯一地标识表中的每一条记录,可以定义一列或多列为主键。 2) 是不可能(或很难)更新. 3) 主键列上没有任何两行具有相同值(即重复值),不允许空(NULL).4) 主健可作外健,唯一索引不可; 2.唯一性约束(UNIQUE)1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置...转载 2018-11-22 13:08:45 · 1343 阅读 · 0 评论 -
sql语句练习50题(Mysql版)
https://blog.csdn.net/fashion2014/article/details/78826299习题来源于网络,sql语句是自己写的,部分有参考。欢迎指正。表名和字段–1.学生表Student(s_id,s_name,s_birth,s_sex) –学生编号,学生姓名, 出生年月,学生性别–2.课程表Course(c_id,c_name,t_id) – –课...转载 2018-11-21 23:14:56 · 309 阅读 · 2 评论 -
mysql数据库产生锁的原因
数据库和操作系统一样,是一个多用户使用的共享资源。当多个用户并发地存取数据 时,在数据库中就会产生多个事务同时存取同一数据的情况。若对并发操作不加控制就可能会读取和存储不正确的数据,破坏数据库的一致性。加锁是实现数据库并 发控制的一个非常重要的技术。在实际应用中经常会遇到的与锁相关的异常情况,当两个事务需要一组有冲突的锁,而不能将事务继续下去的话,就会出现死锁,严 重影响应用的正常执行。...转载 2018-11-11 21:11:22 · 294 阅读 · 0 评论 -
MySQL数据库(一)简介及安装
数据库(database)长期存储在计算机内的,有组织、可共享的数据的集合。具有较高的数据独立性和易扩展性,可为各种用户共享。数据库分类:关系型数据库:MySQL 非关系型数据库: Redis MongoDB数据库管理系统(database management system)操纵和管理数据库的大型软件,用于建立,使用和维护数据库,简称DBMS。 它对数据库进行统一的管...转载 2018-08-10 11:24:30 · 1537 阅读 · 0 评论