随笔分类 - Mysql
摘要:什么时候创建组合索引? 当我们的where查询存在多个条件查询的时候,我们需要对查询的列创建组合索引 为什么不对每一列创建索引 减少开销 覆盖索引 效率高 减少开销:假如对col1、col2、col3创建组合索引,相当于创建了(col1)、(col1,col2)、(col1,col2,col3)3个索引 覆盖索引:假如查询SELECT col1, col2, col3 FROM 表名...
阅读全文
摘要:mysql对同样一次查询会将结果放入queryCache中,在mysql8.0这个功能已经被砍掉了,适合不经常变动的表,因为经常更新,缓存就是失效,如果经常更新设置了缓存会影响性能,如果是以查询为主的表,可以设置一下 上图最后两项是设置缓存,1表示开启 Qcache_hits表示缓存命中数量,下图中插入了一个缓存,有5999条查询都走了这条缓存,没有直接去查询数据库 来自为知笔记...
阅读全文
摘要:当请求查询语句很简单,返回速度很快时,应该把最大连接数设置小一点,哪怕请求数量很多,因为返回很快,但是多开的连接反而占用了太多服务器资源,得不偿失来自为知笔记(Wiz)
阅读全文
摘要:这里映射到docker容器后,会报错权限问题,因为我们设置的日志权限不对,可以查看日志文件在docker容器内部的属主拿到属主的用户id,再查找我们宿主机的属主对应容器内部属主id的用户,把文件属主改成该用户,再次映射就解决问题 [client] default-character-set = utf8mb4 [mysql] default-character-set = utf8mb4 [m...
阅读全文
摘要:首先你要知道; 无论是Myisam和Innodb引擎,如果在建表的时候没有显示的定义一行主键列的话,他内部都会自动创建一个隐藏的主键索引; 主键索引以外的索引假设称为次索引;首先Myisam和Innodb两个都是默认采用的btree索引,可以脑补一颗二叉树; myisam引擎的数据在物理磁盘上是按照
阅读全文
摘要:将user_sys表分成3个区 id 6的 强制使用某一个分区去查询数据 我们按照主键值区间分区之后查询效率也会提升,因为查询数据时会到分区中查找,分区的数据比原来小很多,所以检索的速度会更加快,分区的时候还可以指定磁盘,这样从不同的磁盘读取数据,也减小了io的压力 还有hash分区和key分区自行了解来自为知笔记(Wiz)
阅读全文
摘要:事务的四大特性 数据库事务 transanction 正确执行的四个基本要素。ACID,原子性(Atomicity)、一致性(Correspondence)、隔离性(Isolation)、持久性(Durability)。 (1)原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态,就像...
阅读全文
摘要:set autocommit=0; //设置autocommit为0会取消自动提交 insert into topic_classes values(320,'火箭班','牛逼') --执行了这句话不执行commit并不会提交数据到数据库,只有在自己的会话中可以看到改变了,其实并没有真正的提交,新开一个会话会发现查询不到这个会话提交的内容,如果没有提交的话 COMMIT --执行这个才会把in...
阅读全文
摘要:MYISAM在查询时会默认加上读锁,插入时默认加上写锁 读锁 加上后 其他线程可读不可写 写锁加上后 别的线程不能读不能写,要等持锁的session释放锁 表锁一般用在查询为主,只有少量按索引条件更新数据的应用,行锁更适合有大量按索引并发更新少量(因为行锁很耗资源,大量并发更新,会使得资源开销很大)不同数据,又有并发查询的应用 MySQL中的表锁兼容性 请求锁模...
阅读全文
摘要:当表很大的时候可以设计冗余字段,避免与大表连表查询造成性能低下 比如日志表和用户表,日志表通常到后期会相当的大可以做一个username的冗余字段,避免查看username的时候去和user表关联 当分页过大时的优化策略 下图的例子是直接使用where去检索一个非索引列,结果是采用全文检索的方式 通过加上order by 索引列把上图查询的type优化成index 使用BTr...
阅读全文
摘要:将加锁等等耗时操作都用在主服务器上,数据同步到从服务器,然后查询都去从服务器查,增删改都在主服务器 实现读写分离 主从复制原理 主从复制步骤 主库将所有的写操作记录在binlog日志中,并生成log dump线程,将binlog日志传给从库的I/O线程 从库生成两个线程,一个是I/O线程,另一个是SQL线程 I/O线程去请求主库的binlog日志,并将binlog日志中的文件...
阅读全文
摘要:mycat(阿里巴巴搞的一个东西)搞了一个虚拟节点,通过这个虚拟节点对分表和分区的操作就好像是在一张表上进行的 可以设置双主架构避免主从模式下有一台主挂掉了,他们互为主从 mycat都是通过配置schema.xml来配置服务器的 mycat分片查询机制 如果查询是不走指定分片字段id字段,则route路由所有的分片,走所有的分片进行查询,简单的查询走指定分片字段的直接到该分片查询数据,...
阅读全文
摘要:一:为什么要分表? 如果一个表的每条记录的内容很大,那么就需要更多的IO操作,如果字段值比较大,而使用频率相对比较低,可以将大字段移到另一张表中,当查询不查大字段的时候,这样就减少了I/O操作 如果一个表的数据量很少,那么查询就很快;如果表的数据量非常非常大,那么查询就变的比较慢;也就是表的数据量影响这查询的性能。 表中的数据本来就有独立性,例如分别记录各个地区的数据或者不同时期的数据,特别...
阅读全文
摘要:首先你要知道; 无论是Myisam和Innodb引擎,如果在建表的时候没有显示的定义一行主键列的话,他内部都会自动创建一个隐藏的主键索引; 主键索引以外的索引假设称为次索引;首先Myisam和Innodb两个都是默认采用的btree索引,可以脑补一颗二叉树; myisam引擎的数据在物理磁盘上是按照顺序存储的,而innodb引擎的表数据是随机分布的; myisam的主键索引的叶子节点只...
阅读全文
摘要:show table status from test //查看test数据库构件情况 select的时候MyISAM明显快于InnoDB,一般用在新闻发布这些,用户登陆这些可能会用到事务的表用innodb 使用唯一索引可以避免重复数据插入,并且还能起到加速查询的作用 sql中变量 select id,username into @gid,@username from user_...
阅读全文
摘要:extra属性显示查询用了哪些资源,当select索引列的时候可以看到是使用了索引去查询的速度就很快 下图的查询方式虽然order_by是根据索引去排序的但是select*返回了多个列,有的列不是索引列,所以需要从磁盘中去查询,下图extra是filesort 实战中优化的一些小技巧 查询id用到主键,所以type是const,最好最快的一种,当type是all时是全表扫...
阅读全文
摘要:SQL UNION 操作符 SQL UNION 操作符合并两个或多个 SELECT 语句的结果。 SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集。 请注意,UNION 内部的每个 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每个 SELECT 语句中的列的顺序必须相同。 SQL UNION 语法 SEL...
阅读全文