美文网首页
Mysql面试相关

Mysql面试相关

作者: 缘尤会 | 来源:发表于2020-10-31 23:21 被阅读0次

    Mysql索引 用还是不用

    • 当数据量小于1000行,可以不用索引
    • 当数据重复度大,比如高于10%,可以不用索引
      索引的价值是帮你快速定位的,如果你想定位的数据有很多,那么索引就失去了它的价值。我们不仅要看字段中的数值个数,还要根据数值的分布情况来考虑是否建立索引。

    索引的种类

    1. 从功能逻辑上分为:
    • 普通索引:基础的索引,没有任何的约束,主要用于提高查询效率
    • 唯一索引:在普通索引的基础上增加唯一性的约束,一张表里可以有多个唯一索引。
    • 主键索引:NOT NULL+ UBIQUE 在唯一索引的基础上增加了不为空的约束。一张表里最多有1个主键索引。
    • 全文索引: 用的不多,mysql 自带的全文索引只支持英文。
    1. 按照物理实现方式:
    • 聚集索引:表中的数据按索引的排序方式进行存储,对查找行很有效。每一个表只能有一个聚集索引,因为数据行本身只能按一个顺序存储。(找到了索引,在它后面就是数据行)
    • 非聚集索引(二级索引或者辅助索引):数据库系统会有单独的存储存放非聚集索引,这些索引项是按顺序存储的,但索引项指向的内容是随机的。像按部首查字典一样,系统会进行两次查找,第一次先找到索引,第二次找到索引对应的位置取出数据行。它维护单独的索引表(只维护索引,不维护索引指向的数据),为数据检索提供方便。
    • 聚集索引和非聚集索引在使用上的区别:
      1. 聚集索引的叶子节点存储的是我们的数据记录,非聚集索引存储的是数据位置,非聚集索引不会影响数据表的物理存储顺序。
      2. 一个表只能有一个聚集索引,因为只能有一种排序存储的方式,但可以有多个非聚集索引。
      3. 使用聚集索引的时候数据的查询效率高,但如果对数据进行插入,删除,更新,效率会比非聚集索引低。
        总结
    • 对WHERE字句的字段建立索引,可以大幅提升查询效率。
    • 使用聚集索引的时候数据的查询效率高,如果查询次数比较多,还是尽量使用主键索引进行数据查询。
    1. 按字段个数进行划分:
    • 单一索引:索引列为1列时,
    • 联合索引:多个列组合在一起创建的索引。联合索引存在最左匹配原则:按照最左优先的方式进行索引的匹配。
      索引也会占用存储空间、降低数据写操作等不足

    mysql 日志

    一般会设置慢查询日志。

    mysql 思维训练

    1. 实现select 取行号
    select  p.name, p.type, p.view, @row_num:=@row_num+1 as row_num from  products a , (select  @row_num:=0) b  order by p_view 
    
    1. 对每个分组排序,并取出前n个
    SELECT p_type, p_name, p_view, row_num from(
    SELECT p_type, p_name, p_view IF(@bak=p_type,@row_num:=row_num+1,@row_num:=1) as row_num, @bak:=p_type 
    from
    (SELECT p_type, p_name, p_view from products 
    ORDER BY p_type, p_view desc ) a,(SELECT @row_num:=0,@bak:=' ’)b ) c
    where c.row_num <2
    

    相关文章

      网友评论

          本文标题:Mysql面试相关

          本文链接:https://www.haomeiwen.com/subject/fdmevktx.html