随笔分类 -  数据库

数据库相关的一些知识和技术
摘要:个人总结: 1)如果单表容量大(大于2G),但是索引少(只通过主键ID查),性能也不会慢 2)如果数据量大(大于500W),但是索引容量小(都是小字节字段),性能也不会慢 3)所以,单表查询的性能取决于索引的大小(因为会放内存里),而索引的查询速度又受硬件的影响。 4)建议:大表(数据量大、容量大) 阅读全文
posted @ 2020-04-22 21:09 系统攻城狮 阅读(6184) 评论(1) 推荐(1)
摘要:文章归属:http://feiyan.info/16.html,我想自己去写了,但是发现此君总结的非常详细。直接搬过来了 关于MySQL索引的好处,如果正确合理设计并且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。对于没有索引的表,单表查询可能几十万数 阅读全文
posted @ 2020-04-14 11:24 系统攻城狮 阅读(587) 评论(0) 推荐(0)
摘要:核心概念: 1.逻辑表:水平拆分的数据库(表)的相同逻辑和数据结构表的总称。例,根据主键尾数拆分为10张表,分别是t_order_0到t_order_9,他们的逻辑表名为t_order 2.真实表:在分片的数据库中真实存在的物理表。即上个示例中的t_order_0到t_order_9。 3.数据节点 阅读全文
posted @ 2019-12-06 17:53 系统攻城狮 阅读(1410) 评论(0) 推荐(0)
摘要:相同点: 1)都可以用来表示YYYY-MM-DD HH:MM:SS[.FRACTION]的时间; 不同点: 1)两者的存储方式不一样 a)timestamp他把客户端插入的时间从当前时区转化为UTC(世界标准时间)进行存储。查询时,又将其转化为客户端当前的时区进行返回。 b)datatime,不会做 阅读全文
posted @ 2019-09-04 14:49 系统攻城狮 阅读(311) 评论(0) 推荐(0)
摘要:产生的原因:应用方的数据库连接有效期时间,大于数据库自己设置的有效期。 解决方案: 一、修改druid配置(如果使用druid的话) PS.此方案对性能会有一定影响 二、修改数据库连接配置 在数据库连接上,加“&autoReconnect=true&failOverReadOnly=false”配置 阅读全文
posted @ 2019-01-21 10:23 系统攻城狮 阅读(103298) 评论(1) 推荐(0)
摘要:Mongodb用于存储非结构化数据,尤其擅长存储json格式的数据。存储的量大概在10亿级别,再往上性能就下降了,除非另外分库。Hbase是架构在hdfs上的列式存储,擅长rowkey的快速查询,但模糊匹配查询(其实是前模糊或全模糊)不擅长,但存储的量可以达到百亿甚至以上,比mongodb的存储量大 阅读全文
posted @ 2018-10-17 11:30 系统攻城狮 阅读(10885) 评论(0) 推荐(2)
摘要:1.关于“因为数据库正在使用,所以无法获得对数据库的独占访问权”的最终解决方案 关键SQL语句: ALTER DATABASE [datebase] SET OFFLINE WITH ROLLBACK IMMEDIATE 用完之后再 alter database [dbname] set onlin 阅读全文
posted @ 2016-08-09 17:25 系统攻城狮 阅读(211) 评论(0) 推荐(0)
摘要:想要将值插入到自动编号(或者说是标识列,IDENTITY)中去,需要设定 SET IDENTITY_INSERT示例:1.首先建立一个有标识列的表:CREATE TABLE products (id int IDENTITY PRIMARY KEY, product varchar(40))2.尝试 阅读全文
posted @ 2016-07-23 12:49 系统攻城狮 阅读(15593) 评论(2) 推荐(0)
摘要:1.导出表数据(dos模式下):mysqldump -u root -p energy energy_wechat_user > test122.txt 阅读全文
posted @ 2016-02-14 19:06 系统攻城狮 阅读(143) 评论(0) 推荐(0)
摘要:explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。使用方法,在select语句前加上explain就可以了:如:explainselectsurname,first_nameforma,bwherea.id=b.idEXPLAI... 阅读全文
posted @ 2015-05-20 17:13 系统攻城狮 阅读(199) 评论(0) 推荐(0)
摘要:1.使用explain语句查看性能mysql> explain select product_id from orders where order_id in (123, 312, 223, 132, 224) \G2.为什么要创建组合索引呢?如果只有一个索引,2个查询条件的语句中会先去索引查询一个... 阅读全文
posted @ 2015-05-20 17:03 系统攻城狮 阅读(259) 评论(0) 推荐(0)
摘要:之前给同事开发了一个功能模块,主要是一些记录的查询和录入。过了一个月同事来找我,说发现这个功能模块打开很慢,一查数据库发现,原来是我当初写的SQL有问题,left join了一张主要数据表,而刚好关联的那个字段又没加索引,导致查询异常缓慢。线上立刻加了索引,分分钟搞定。但是回头一想,为什么这么简... 阅读全文
posted @ 2015-04-21 15:18 系统攻城狮 阅读(362) 评论(0) 推荐(0)
摘要:“标”的作用是为了标示一个用户特性,例如“卖家标”的作用就是标示这个用户是卖家;这种标需求很广,但是这种标有个特性就是只有2种状态:有或者没有,在计算机中就是0或者1;这就好办了,在表中增加整数型字段,整数的每个二进制bit位就可以作为一个标,这样大大节省了空间,例如long型整数就可以为63个标所用(java中long整型有64位)。怎么打标:打标就是把标对应字段的某个bit位 置为1;将某个标(tag)定义为一个特定数字,数字为2的n次方,例如1024(2的10次方),要打这个标的话实际进行“或”操作:tag= tag|1024,这样tag字段的第11位就变成了1,对其它bit位没影响.. 阅读全文
posted @ 2014-03-27 11:38 系统攻城狮 阅读(1487) 评论(2) 推荐(1)
摘要:一般刚开始学SQL语句的时候,会这样写代码如下:SELECT * FROM table ORDER BY id LIMIT 1000, 10;但在数据达到百万级的时候,这样写会慢死代码如下:SELECT * FROM table ORDER BY id LIMIT 1000000, 10;也许耗费几十秒网上很多优化的方法是这样的代码如下:SELECT * FROM table WHERE id >= (SELECT id FROM table LIMIT 1000000, 1) LIMIT 10;是的,速度提升到0.x秒了,看样子还行了可是,还不是完美的!以下这句才是完美的!代码如下:S 阅读全文
posted @ 2013-12-12 15:47 系统攻城狮 阅读(450) 评论(0) 推荐(0)
摘要:explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。使用方法,在select语句前加上explain就可以了:如: explain select surname,first_name form a,b where a.id=b.id EXPLAIN列的解释:table:显示这一行的数据是关于哪张表的type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALLpossible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以. 阅读全文
posted @ 2013-12-12 13:44 系统攻城狮 阅读(273) 评论(0) 推荐(0)
摘要:前言:这是一篇我以前写的关于数据库设计当中范式理解的笔记,现在转到博客园上来。书本上关于范式的内容太抽象,难易理解,更难记忆。所以去网上搜罗了一些资料,结合自己的经验,用较为直白的语言总结下关于范式的内容:第一范式(1NF)原文:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF。个人理解:设计一张表的字段的时候,要结合实际需求,设计详细完整的字段。例如:设计一张投票的表时,如果只设计了一个“住址”的字段,而实际情况却是有关于“住址”的国家、城市、地区3个属性的值,那这个表设计的就是不合理的,不符合第一范式的。第二范式(2NF)原文:若关系模式R∈1NF,并且每一个非主属性都完全 阅读全文
posted @ 2013-12-03 17:35 系统攻城狮 阅读(420) 评论(0) 推荐(0)
摘要:什么是冗余字段?在设计数据库时,某一字段属于一个表,但它又同时出现在另一个或多个表,且完全等同于它在其本来所属表的意义表示,那么这个字段就是一个冗余字段。——以上是我自己给出的定义冗余字段的存在到底是好还是坏呢?这是一个不好说的问题。可能在有人看来,这是一个很蹩脚的数据库设计。因为在数据库设计领域,有一个被大家奉为圭臬的数据库设计范式,这个范式理论上要求数据库设计逻辑清晰、关系明确,比如,”用户昵称”字段”nickname”本来属于表”user”,那么,表示”用户昵称”的字段就唯一的只应该属于”user”表的”nickname”字段,这样,当用户要修改昵称的时候,程序就只需要修改 user.n 阅读全文
posted @ 2013-11-15 14:05 系统攻城狮 阅读(1904) 评论(0) 推荐(0)