
mysql
一笛一剑一玈人
天地滂沱如何渡,蓑衣褪尽任浊流
展开
-
高性能MySql之字段设计
前言导致数据库慢的原因有呢些?频繁的磁盘操作数据量过大针对原因我们可以选择优化的几个方面设计数据库数据表时选择正确的字段以及存储引擎利用好mysql服务器提供的功能(索引,分区等等)横向扩展,负载均衡,读写分离字段设计结论:越小越好,够用就好更小的数据类型通常更快,因为他们占用更少的磁盘、内存和CPU缓存,并且处理时有需要的CPU周期也更少如果无法确定哪个数据类型是最好的,就选择你认为不会超过范围的最小类型简单就好,没null最好简单数据类型的操作通常需要更少的原创 2020-05-25 21:20:36 · 563 阅读 · 0 评论 -
MySql学习笔记——全文索引(三十)
全文索引:关键字段不是本身,而是从字段中提取的关键词,作为关键字普通索引:index(user),user字段的整体内容作为索引关键字来使用全文索引,主要是针对大段文本全文索引的一个要素,就是分词提词,mysql全文索引不支持中文,但在 5.7.6 版本,MySQL 内置了 ngram 全文解析器,用来支持亚洲语种的分词.典型的全文索引工具Coreseek,XunSearch,S...原创 2020-04-11 15:10:30 · 172 阅读 · 0 评论 -
MySql学习笔记——压测工具slap(二十九)
自带的,本机地址C:\Program Files\MySQL\MySQL Server 5.7\bin直接在cmd运行即可基础语法:mysqlslap xxxx典型的测试选项如下自动生成sql测试mysqlslap --auto-generate-sql -u root -p模拟并发测试mysqlslap --auto-generate-sql --concurrency=x...原创 2020-04-11 11:54:18 · 269 阅读 · 0 评论 -
MySql学习笔记——典型的服务器配置(二十八)
当前最大连接数:show variables like ‘max_connections’表句柄缓存:show variables like ‘table_open_cache’索引缓冲大小,可以尽量设的大一点innodb存储引擎缓存池大小(对innodb来说最重要的一个配置,设置尽可能的大)show variables like ‘innodb_buffer_pool_size’...原创 2020-04-11 11:20:19 · 116 阅读 · 0 评论 -
MySql学习笔记——profile信息查询(二十七)
详细记录sql执行时间的工具开启profile配置项profiling完成:开启:set profiling = on执行sql时会自动记录查看:show profiles具体某条sql的详细步骤时间命令:show profile for query xx;注意:如果sql查询结果为空,则不会有该条profile...原创 2020-04-10 21:01:21 · 245 阅读 · 0 评论 -
MySql学习笔记——慢sql查询(二十六)
作用:用于记录执行时间超过某个临界值的sql日志,用于快速定位慢查询开启日志使用set global 命令完成配置即可set global slow_query_log = On;开启之后会在数据目录创建 xxx.slow.log设置临界时间配置项long_query_time查看日志一旦超过临界时间,就会被自动记录下来...原创 2020-04-10 20:31:05 · 112 阅读 · 0 评论 -
MySql学习笔记——典型的sql写法(二十五)
DDL执行在线上服务器执行DDL,更新表的结构,这个操作需要谨慎处理DDL结构更改,会导致全表被独占锁定,此时表处于维护状态,不可修改。如果是innodb还好些,因为5.6支持online DDL效果显著缩短锁定时间采用的维护表的DDL,是copy策略:例:增加一个列,一个索引:并不是直接执行alter table思路:创建一个新表,满足新的结构将旧表数据导入新表中(读操作)逐条...原创 2020-04-09 21:00:16 · 162 阅读 · 0 评论 -
MySql学习笔记——高可用(二十四)
高可用:保证服务器24小时一直在线的状态之前的读写分离负载均衡是高性能在服务器架构时,所有的单点服务器(由一台服务器提供服务叫单点服务器),需要提供冗余...原创 2020-04-08 20:15:36 · 264 阅读 · 0 评论 -
MySql学习笔记——负载均衡(二十三)
load balance:当存在多台服务器提供一个任务时,需要从其中选择一台用来完成当前任务,选择的算法就是负载均衡。在mysql中往往会采用一写多读架构,因为一般读操作往往多余写操作,还有就是写操作的同步是个问题一写多读中,读服务器需要负载均衡典型的负载均衡算法轮询:轮着来,雨露均沾加权(权重)轮询:依据能力轮着来负载分配:依据当前的空闲状态(cpu利用率)可通过框架完成...原创 2020-04-08 18:43:03 · 259 阅读 · 0 评论 -
MySql学习笔记——横向扩展mysql服务器(二十二)
横向扩展有多台mysql服务器,提供数据存储服务横向扩展是提升数据库服务器性能的根本手段,受限于单台计算机的处理能力,去使用多台计算机完成同一个服务支持比较典型的概念:读写分离:有一些服务器提供读操作select,另一些服务器提供写操作update,delete,insert目的分散压力,读服务器不会被阻塞负载均衡主从复制:由mysql提供的技术,用于完成一台服务器向...原创 2020-04-05 13:30:16 · 285 阅读 · 0 评论 -
MySql学习笔记——水平与垂直分表(二十一)
水平分表通常指的是:通过应用程序层,将数据划分到不同的表中进行存储,甚至可以分布到不同的数据库服务器上。分区是在mysql服务器层完成的分区算法分表会导致客户端明显的改变,在服务器端,出现结构相同的多张表以账单为例:结构完全相同的三张表应用程序决定当前使用哪张表以时间为依据查数据插数据先设计生成id的表分表的原因数据库减压分区算法局限(重要)分区和水平分表都属于...原创 2020-04-04 16:01:05 · 481 阅读 · 0 评论 -
MySql学习笔记——分区管理语法(二十)
list和range可以删除或者新增分区hash和key可以修改分区数量list和range新增删除:指定删除名字即可,删除分区分区内的数据也会被清除掉hash和key增加分区,在原有分区基础上增加4个分区减少分区:在原有基础上减少6个分区key和hash的分区管理不影响数据,在管理时需要将数据在重写分配到新的分区中,效率较低分区使用总结在客户端不变的...原创 2020-04-02 15:37:33 · 165 阅读 · 0 评论 -
MySql学习笔记——分区所用到的四种算法(十九)
分区字段必须为主键或主键的一部分,分区字段必须为强检索字段hash算法使用求余方案,用一个整数的值,将记录分散到分区中hash:一类算法的总称,求余,md5,sha1等都是hash算法,只要使用某个输入,得到某个特定输出的算法就是hash算法,要求相同的输入应该得到相同的输出key算法是一个更加通用的hash算法,在hash中,仅仅可以针对整数进行求余运算,而key可以对非整型进行运算,...原创 2020-04-01 20:55:59 · 361 阅读 · 0 评论 -
MySql学习笔记——分区Partition(十八)
作用:将一张表中的数据和索引,分散到不同的文件中进行存储,称之为分区操作。划分出来的文件就是不同的分区innodb文件格式:.ibdmyisam文件格式:.mbd,.myi分布之后,每个文件中的数据量会显著减少,来保证单独文件的执行效率演示:通常使用id作为分区依据采用hash算法将数据均匀的分散到分区中,适用于数据量大,同时没有明显的逻辑区分分区完毕后,客户端是透明的,仅...原创 2020-04-01 20:17:39 · 266 阅读 · 0 评论 -
MySql学习笔记——查询缓存(十七)
Query Cache:是MySql层面提供的数据缓存,用于缓存select查询的结果用法:在配置文件中开启缓存my.ini(win)/my.cnf(linux)在[mysqlId]中加入query_cache_type = 0/1/2其中0表示关闭其中1表示开启,是默认缓存的,我们也可以增加sql-no-cache来放弃缓存其中2表示开启,但是默认是不开启的,需要增加sql-c...原创 2020-03-30 15:59:26 · 182 阅读 · 1 评论 -
MySql学习笔记——聚簇索引(十六)
聚簇索引含义:关键字和记录在一起进行存储,称之为聚簇结构,聚簇索引常规索引:是关键字和记录位置的映射关系聚簇索引:不是关键字和记录映射,而是关键字和记录就存储在一起聚簇索引是在Btree的基础上改造的,数据结构为B+tree哈希索引当索引被载入到内存时,采用的存储结构...原创 2020-03-28 17:39:04 · 193 阅读 · 0 评论 -
MySql学习笔记——索引的Btree数据结构(十五)
Btree索引索引存储在磁盘上所用的基础的通用的存储结构,无论是mysql,mongodb,或者其他的数据库,在磁盘上存储索引时,用的都是Btree结构特点一个Btree节点,会存储多个关键字,多少是由节点的大小和关键字的大小(关键字越小,节点存的越多)来确定的,通常节点的大小是固定的,由计算机的文件系统来确定,一次性磁盘读取的内容量,就是一个节点的大小大量的关键字分散到多个多个节点...原创 2020-03-28 11:32:13 · 363 阅读 · 0 评论 -
MySql学习笔记——前缀索引(十四)
语法index (field(10)):使用字段field的前10个字符建立索引,默认是使用字段的全部字符建立索引条件:前缀的标识度足够的情况下 ,例如:密码难度:前缀长度的确定,分析多长的前缀长度才够计算过程如下:使用总的数量/不重复的密码数量再使用不同的前缀计算其标识度,直到跟上方相近为止:截取,计算因此,建立索引时用前九个即可使用上与普通索引一致使用目的减少关键...原创 2020-03-28 10:12:14 · 223 阅读 · 0 评论 -
MySql学习笔记——索引创建(十三)
建立基础索引:在where,order,join字段上建立索引优化组合索引:基于逻辑业务,如果条件经常性出现在一起,多字段索引升级为复合索引(比如不同行业,行业下属项目)如果通过增加个别字段,就可以出现索引覆盖,那就增加个别字段查询时不会用到的索引应该删除掉,减轻索引维护...原创 2020-03-28 09:53:05 · 243 阅读 · 0 评论 -
MySql学习笔记——索引语法细节(十二)
在满足索引的使用场景下,索引也不一定会被使用,主要原因是因为语法不严谨导致的字段要独立出现字段要独立出现在表达式的一侧,字段参与运算会导致表达式失效独立出现在左侧或者右侧都可以like查询不能以通配符开头%:任意字符的任意数量_:任意一个字符注意:字符转比较时,不能使用包含的逻辑,比如查询标题中包含“java”的文章subect like '%java'这种操作...原创 2020-03-27 21:04:34 · 228 阅读 · 0 评论 -
MySql学习笔记——索引使用场景之覆盖查询字段(十一)
索引覆盖是一个现象,指的是索引中提供的关键字覆盖了查询需要的字段数据,此时查询会由索引提供,而不是由数据表提供建立一个复合索引更改字段组合,增加一个user字段两次差距在于多了一个user字段,因此索引没能覆盖因此建议在查询时,select后只写必要的字段,被覆盖的可能性提升...原创 2020-03-25 20:52:23 · 408 阅读 · 0 评论 -
MySql学习笔记——索引使用场景之order by与join(十)
OrderBy先用没有索引的字段进行排序外部排序:相对于内部排序来说的,性能较低,因为需要将数据读取到内存,不能一次性读取(如果数据量太大的话),需要分段读取然后合并排序结果增加索引进行排序索引可以用来排序的原因:本身就是按照关键字进行排序的Join在使用join查询时,需要在关联字段上建立索引查询班级内的学生数量在关联字段s.class_id上没有索引,执行时间长...原创 2020-03-25 20:36:21 · 614 阅读 · 0 评论 -
MySql学习笔记——索引使用场景之where(九)
场景指的是哪些情况会使用where先建立两张表,student和class数据量当前只有主键索引,查询计划在主键上查询一条带索引的不带索引的增加user字段索引...原创 2020-03-24 20:13:49 · 271 阅读 · 0 评论 -
MySql学习笔记——索引执行计划(八)
用法在执行select前,使用关键字explain,可以获取该查询语句的执行计划,目前只支持查询执行计划是:当执行sql时,先分析优化形成执行计划,然后按照计划执行...原创 2020-03-24 19:56:56 · 209 阅读 · 0 评论 -
MySql学习笔记——索引(七)
索引什么是索引索引,index,是关键字与数据的映射关系,称之为索引关键字,从数据中提取,用于标识检索数据的特定内容使用索引的目的加快检索为什么索引检索快?关键字相对于数据本身,量小关键字都是排序的,遍历可以确定位置索引是最常用的优化手段MySql中索引类型普通索引(index)唯一索引(unique index)主键索引(primary index)...原创 2020-03-23 21:19:00 · 285 阅读 · 0 评论 -
MySql学习笔记——锁(六)
锁的作用避免资源争用的机制功能资源争用:多个任务同时使用一个资源数据库中,数据(记录)就是资源,不同客户端对数据CRUD就是不同任务思路:在某个任务使用资源时,标记出来,其他任务就不能同时操作,只能等待或者放弃流程先尝试加锁,如果锁定成功,就使用资源,使用结束后释放锁,否则只能等待或放弃锁的类型共享锁,读锁,S-lock在需要执行读操作时,增加的锁定类型。会共享读操作,...原创 2020-03-21 19:43:15 · 150 阅读 · 0 评论 -
MySql学习笔记——存储引擎(五)
早期问题如何选择MyISAM和Innodb现在已经没有这个问题,就选Innodb就行了存储引擎:MySql中的数据,索引以及其他的对象的存储形式,是一套文件系统的实现差异对比因为myisam是按顺序插入,前面的删掉了,也不会插入到前面的空隙中,所以会存在空间碎片选择...原创 2020-03-21 18:10:32 · 231 阅读 · 0 评论 -
MySql学习笔记——范式Normal Format(四)
范式即设计规范第一范式:字段原子性,字段不可再分割关系型数据库默认满足第一范式逻辑上的含义一个比较容易犯的问题关联字段的保存:文章和标签(不建议这样设计)通过使用tag_id中存储多个tagid来表示两者之间的关系,带来最大的问题是维护和更新比如当这篇文章有一个标签不用了,那就需要遍历去检查,然后在取出,再存入,这样就会带来极大的维护困难,如果tags是定死的话可以这样,比如上...原创 2020-03-21 12:00:28 · 497 阅读 · 0 评论 -
MySql学习笔记——表之间关系设计(三)
一对一一条记录字段较多,分布到多个表中进行存储,比如展示给用户的只有表中的几个字段,其余的不常用基础表+扩展表:产生关联,可用相同的主键表示,相同的id就是同一个,或者就是一对n,n为1一对多/多对一在多端使用关联字段,关联一端主键栏目category:id,title文章article:id,subject,category id多对多文章 对应 关键字(标签)文章artic...原创 2020-03-21 11:05:53 · 170 阅读 · 0 评论 -
MySql学习笔记——精度设计(二)
例如金额,价格,统计数据的存储对数据精度要求较高整数运算没有精度问题,小数运算存在精度问题,计算机无法将小数完全转为二进制,所以可以通过缩小单位通过整数运算体高精度price decimal(8,2) 定点数,两位小数,可以存很大的数price int(bigint) 整数定长数据类型和变长数据类型的选择定点数与浮点数的选择定点数(变长类型)decimal:不会导致数据丢失,占...原创 2020-03-19 21:35:09 · 248 阅读 · 0 评论 -
MySql学习笔记——字段设计(一)
数据库慢的原因磁盘操作为主数据量过大优化的几个方面设计数据库数据表时选择正确的字段以及存储引擎利用好mysql服务器提供的功能(索引,分区等等)横向扩展(终极策略),负载均衡,读写分离典型sql字段设计涉及方面:字段类型选择,设计规范,范式例:存储ip地址120.0.0.1常规选型varchar()优化选型int unsigned,因为IP地...原创 2020-03-17 20:46:05 · 159 阅读 · 0 评论