1.还有关于索引的问题
1.不管是mysql数据库还是DM数据库,索引在一个数据库当中都不能重复
2.建表语句和创建索引语句之间的转换
建表语句
UNIQUE INDEX `interfacePK`(`itfId`)
创建索引语句
pf1013_uk_1代表索引名
on 对于哪个表得哪个字段
CREATE UNIQUE INDEX pf1013_uk_1 ON pf1013 ( errorRecordId );
代表两个字段一起组成唯一索引
UNIQUE INDEX `channelPK`(`channelCode`, `channelName`)
2.mysql plus
突然被问到mysql plus 第一反应不是iphone plus么
官网链接:Mybatis-Plus
然后 大致了解他是一个mysql主从集群,默认两从,最多六从,特点是方便
3.in和instr的区别
(下述的in方法不建议使用,因为$会造成sql注入,可以改为collection)
和instr比 in可以走索引
ex:
此时不走tagName索引
SELECT tagId from pf1009 where instr("x1,x2,x3",tagName)>0
此时走tagName索引
SELECT tagId from pf1009 where tagName in ("x1","x2","x3")
instr 母串在前 子串在后
前端传入mybatis实现方式
1.分割成字符串
//由"x1,x3"变成"x1","x3"
StringBuilder builder = new StringBuilder();
for(String tag:tags){
builder.append("'"+tag+"',");
}
//去掉最后一个逗号,
String substring = builder.substring(0, builder.length() - 1);
params.setTagName(substring);
2.$接收
SELECT tagId from pf1009 where tagName in (${tagName})
3.注意,不是每种数据库都有instr函数的,所以他虽然速度快但是用途没有like广泛,就是你切换数据库的时候可能还要改sql,比如postgre就没有这个函数
4.主键还用建索引吗?
不用,主键已经是唯一索引
当你创建或设置主键的时候,mysql会自动添加一个与主键对应的唯一索引,不需要再做额外的添加
5.解决查询慢问题,关联表也要建立索引
起因:我把主表的几个查询字段已经建立了索引,但是速度没有快多少
解决办法:把left join 表的检索字段也加上索引,速度明显快很多
SELECT OA0501.*from OA0501
LEFT JOIN OA0507 ON OA0501.ID = OA0507.OA0501Id
where OA0501.OA0201Id=#{cityId}
6.数据库中建外键不能重名
mysql加外键报错 ERROR 1826: Duplicate foreign key constraint name 'idXXXX'
因为已经存在一个同样名称的外键了