zoukankan      html  css  js  c++  java
  • mysql之技巧

    一、mysql基础知识

        (1)、mysql统计行数量count(*)、count(1)和count(列名)有什么区别?

    在InnoDB中COUNT(*)和COUNT(1)实现上没有区别,而且效率一样,但是COUNT(字段)需要进行字段的非NULL判断,所以效率会低一些。
    因为COUNT(*)是SQL92定义的标准统计行数的语法,并且效率高,所以请直接使用COUNT(*)查询表的行数!

         (2)、mysql插入语句之value与values区别?

    应该在插入单行的时候使用VALUES,在插入多行的时候使用VALUE

         (3)、mysql中添加或插入语句(Insert)的几种使用方式?

             1、INSERT 简写方式插入数据(不推荐)

    使用Inset into 表名 values(值1,值2)进行插入,并对查看插入数据是否成功
    注意:insert这种简写的方式虽然非常简单,但是Values后面的值必须和表中的类顺序对应,且类型要保持一直,即使表中某一个列不需要值也必须赋值为null,
    比如我们的主键id设置的是递增实际上是不用设置值的,但是使用这种方式必须赋值为null 不推荐的原因:在实际开发中如果使用此方法进行插入数据,后面表进行了改动(比如字段顺序改变了)那么整个语句都将报错,扩展性及其差,且维护起来比较困

             2、INSERT 完整写法(推荐)

    使用Inset into 表名(字段1,字段2) values(值1,值2)进行插入,并对查看插入数据是否成功。
    推荐使用的原因:这一次我们设置了没有给id赋任何值包括null,而且不用关心表中字段的顺序,比如下面不按照正常顺序添加,
    我们将age放在第一,name放在第二个.也能添加成功;需要注意的是表名后面的字段名必须和后面values赋的值保持一致;实际开发中在维护和扩张方面都比方案一要好

             3、REPLACE INSERT语句和INSERT IGNORE INTO 语句

    此语句的作用是当我们在插入一条数据时,如果此条已经存在,那么先删除原来存在的数据再添加插入的数据,如果不存在那么直接插入新的数据。
    使用Inset into 表名(字段1,字段2,字段3) values(值1,值2,值3);Inset into 表名(字段1,字段2,字段3) values(值1,值2,值3)进行插入。
    注意:却分是否存在是通过主键来确定的。

      (4)、from多表关联和inner join多表关联的区别?

    from多表关联是老SQL标准,inner join关联是新SQL标准。
    从结果上看一样。但是从实现上看,多个from是迪卡尔集,再筛选,效率是O(n^2),很差。join是先做hash,再匹配,效率是O(logN)

    二、mysql进阶优化

         (一)、mysql索引有哪些类型和如何避免索引被破坏?

                 1、索引类型?

    普通索引、唯一索引、主键索引、组合索引、全文索引、空间索引

                 2、如何避免索引被破坏?

        原则:第一个索引不能掉、中间索引不能掉

    • 当你使用索引的时候,最好能够把你建立的索引的字段都给用到。不仅可以提供查询的效率。
    • 最佳左前缀法则,意思就是当你如果有建立过多个字段索引的组合索引的时候,最要遵循最左前缀法则,指的是查询从索引的最左前列开始并且不能跳过索引中的列。
    • 不在索引列上做任何操作(计算、函数(自动or手动)类型转换),会导致索引失效而转向全表扫描。
    • 存储引擎不能使用索引中范围右列的列,范围之后索引全失效。
    • 尽量使用覆盖索引(只访问索引的查询(索引列和查询一致)),减少select *
    • mysql在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描。
    • is null,is not null也无法使用索引,所以表中的数据应该不能为NULL。
    • like以通配符开头('%abc...')或者('%abc%...'),mysql索引失效会变成全表扫描的操作,使用('abc%')索引不失效
    • 字符串不加单引号索引失效。
    • 少用or,用它来连接时会索引失效。
  • 相关阅读:
    ActiveMQ-在Centos7下安装和安全配置
    Servlet基础知识点
    Filter的执行顺序
    Dubbo-使用Maven构建Dubbo服务的可执行jar包
    Dubbo-Centos7管控台安装
    Spring 小知识点
    Zookeeper+ActiveMQ集群搭建
    Zookeeper在Centos7上搭建单节点应用
    SpringMVC+AJAX+JSON
    RocketMQ-Filer
  • 原文地址:https://www.cnblogs.com/772933011qq/p/13541274.html
Copyright © 2011-2022 走看看