20170817

来源:互联网 发布:大数据时代的思维变革 编辑:程序博客网 时间:2024/06/05 23:39

1索引种类
按在磁盘上的物理位置分为聚集索引非聚集索引
按添加索引的方式分为:
1.1 普通索引:alter table tablename add index index_name on( colname())
create index indexname on table(colname())
1.2 唯一索引
在普通索引前添加unique关键字
1.3 组合索引
alter table table_name add index index_name(colanme1(),colname2())
组合索引有一个最左匹配原则,
当在a,b,c三列上加索引时,只会匹配
a / a,b /a,b,c 三种情况
1.4 全文索引
mysql在3.23.23开始支持全文索引和全文检索,fulltext索引尽可用于MyISAM表
2优化索引使用
1索引不会包含含有null值的列,组合索引有任意一列为null则索引失效,所以尽量在数据库设计时,不要让字段默认为null,避免使用null判断,将使索引失效
2使用短索引,索引所在列的字段长度如果过长,在前几个字段如果是不同的,可以指定较短的索引长度
3 mysql查询只会使用一个索引,因此如果where子句中已经使用了索引的话,那么 orderby中的列不会使用索引,因此如果数据库默认排序可以符合要求的情况下不要使用排序操作
4一般情况下不鼓励使用like,如果使用最好使用‘abc%’这种形式
5不要再列上进行计算,这样会使索引时小而进行全表扫描,不要用not in 和<>
3sql优化
1在合适的列加索引,索引使用规则如上
2使用exists代替in
3使用union all 代替union
4尽量使用where代替having
1怎么能不写setter方法
setter方法只有在xml中配置property时才必须使用,在配置了开启注解后,不需要使用setter方法 本次发现使用Resource注解注入logic时,一直报其中的mapper没有setter方法的错误,经查原因为在xml中配置了property有使用注解,两者冲突,spring使用了xml的配置,故报错,将logic注册bean的地方只保留一个logic,不设property即可
两个问题
2 {}和#{}到底有什么区别  
1
在mybatis预处理sql后,会直接生成对应的sql,#会生成一个prepare statement占位符,可以防止sql注入
2 #的预编译sql在sql执行阶段才会把参数传进去,并且增加引号,并且由于预编译sql可以多次使用,效率也较高
3 在传入 表名 列名 函数名等数据库内部结构情况下,必须使用$,否则#会加上引号,不正确

原创粉丝点击