mysql:
优化方法:
1,sql语句的优化:
在where中尽量避免使用!=
在where中对null进行判断
字段都有默认值
保存数据前数据的处理
没有变长字段的情况下,varchar比char更好
limit跟order by
删除表用distinct 而不是delete
2,索引优化:
经常使用的字段添加索引
表的主索引名字尽量短
3,数据库结构的优化:
范式优化:消除冗余(节省空间)
反范式优化:适当的增加冗余(减少join)
拆分表:垂直拆分和水平拆分
4,服务器硬件优化
磁盘搜素
io读写
cpu周期
内存带宽
创建数据库: create database数据库名charset=utf8;
删除数据库: drop database数据库名;
切换数据库: use数据库名;
查看当前选择的数据库: select database();
查看当前数据库中所有表: show tables;
创建表:auto_increment表示自动增长,只能是数字类型
create
table 表名(列及类型);
如:
createtable students(
id int auto_increment primary key,
sname varchar(10) not null
);
修改表
alter
table 表名add|modify|drop 列名 类型;
如:alter table students add birthday datetime;
删除表: drop table 表名;
查看表结构: desc 表名;
更改表名称: rename table 原表名 to 新表名;
查看表的创建语句: show create table '表名'
数据操作
查询: select * from表名
增加:
全列插入:insert into 表名values(...)
缺省插入:insert into 表名(列1,...)
values(值1,...)
同时插入多条数据:insert into 表名values(...),(...)
或insert into 表名(列1,...)
values(值1,...),(值1,...)
修改: update 表名 set 列1=值1,... where 条件
删除: delete from 表名 where 条件
逻辑删除,本质就是修改操作update
altertable students add isdelete bit default 0;
如果需要删除则
updatestudents isdelete=1 where ...;
多表关联查询有五种连接方式:
1、内连接
|-等值连接
两种写法
inner join
条件
|-不等值连接
在连接条件使用除等于运算符以外的其它比较运算符比较被连接的 列的列值。这些运 算符包括>、>=、<=、<、!>、!<和<>
2、外连接
|-左外连接
|-右外连接
3、自然连接
natural join
4、cross连接 交叉连接
5、自连接
1)即使是在连接条件不满足的情况下,外部连接也会在结果集内返回行,而内部连接不会在结果集类返回行 当外部连接不满足连接条件时,通常返回一个表中的列,但是第二个表中没有返回值--为null
2)自然连接不包含重复的属性
3)交叉连接是两个表数据笛卡尔积(相当于不加连接条件)
Mongodb:
三元素:数据库,集合,文档
1、集合就是关系数据库中的表
2、文档对应着关系数据库中的行
3、文档,就是一个对象,由键值对构成,是json的扩展Bson形式
eg:{'name':'guojing','gender':'男'}
查看所有数据库名称: show dbs
切换数据库: use数据库名称
删除当前指向的数据库: db.dropDatabase()
查看当前数据库的集合: show collections
删除当前数据库的集合: db.集合名称.drop()
插入:
db.集合名称.insert(document)
eg1:db.stu.insert({name:'gj',gender:1})
插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId
eg2:
s1={_id:'20160101',name:'hr'}
s1.gender=0
db.stu.insert(s1)
简单查询:
db.集合名称.find()
db.集合名称.findOne({条件文档}) findOne():查询,只返回第一个
方法pretty():将结果格式化
db.集合名称.find({条件文档}).pretty()
更新:
db.集合名称.update(
,
,
{multi: }
)
参数query:查询条件,类似sql语句update中where部分
参数update:更新操作符,类似sql语句update中set部分
参数multi:可选,默认是false,表示只更新找到的第一条记录,
值为true表示把满足条件的文档全部更新
例1:全文档更新
db.stu.update({name:'hr'},{name:'mnc'})
例2:指定属性更新,通过操作符$set
db.stu.insert({name:'hr',gender:0})
db.stu.update({name:'hr'},{$set:{name:'hys'}})
例3:修改多条匹配到的数据
db.stu.update({},{$set:{gender:0}},{multi:true})
保存
db.集合名称.save(document)
如果文档的_id已经存在则修改,如果文档的_id不存在则添加
例1:
db.stu.save({_id:'20160102','name':'yk',gender:1})
例2:
db.stu.save({_id:'20160102','name':'wyk'})
删除
db.集合名称.remove(
,
{
justOne:
}
)
参数query:可选,删除的文档的条件
参数justOne:可选,如果设为true或1,则只删除一条,默认false,表示删除多条
例1:只删除匹配到的第一条
db.stu.remove({gender:0},{justOne:true})
例2:全部删除
db.stu.remove({})
创建集合
db.createCollection(集合名称,bson格式)
db.createCollection('sub',{capped:true,size:10})
去重:
db.集合名称.distinct('去重字段',{条件})
例1:查找年龄大于18的性别(去重)
db.stu.distinct('gender',{age:{$gt:18}})
Redis:
set key value:给一个key赋值value
mset key value [key value]:设置多个键值对
get key:根据key获取一个值
mget key [key]:根据多个key获取多个值
setex key seconds value:给一个key设置值value,过期时间seconds
incr key:将key对应的值+1
incrby key increment:将key对应的值+increment
decr key:将key对应的值-1
decrby key increment:将key对应的值-increment
ؕ��E�
网友评论