zoukankan      html  css  js  c++  java
  • 关于MySQL优化问题

    众所周知在数据量庞大的情况下普通的SQL语句已经满足不了我们的需要了,这个时候就需要DBA去进行数据库的优化,而我们作为一名开发人员不能对数据库进行优化这时该怎么办呢?答案是只能在SQL语句上面进行优化,一般都会建立索引来达到SQL语句优化的目的。

    问题来了,为什么建立索引就会优化我们的查询速度呢?

    数据库在执行一条查询语句时,默认是根据搜索条件全表检索,遇到符合条件的就加入搜索结果的集合,如果我们对某一字段增加索引,查询时就会先去索引列表中一次定位到特定值的行数,大大减少遍历匹配的行数,所以能明显增加查询的速度。

     添加索引的话,首先去索引列表中查询,而我们的索引列表是B类树的数据结构,查询的时间复杂度为O(log2N),定位到特定值得行就会非常快,所以其查询速度就会非常快。

    MySQL目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE

    fulltext就是全局索引,它的出现是为了解决WHERE name LIKE “%word%"这类针对文本的模糊查询效率较低的问题。

    hash就是一种(key,value)的键值对,每个key都是唯一的不允许重复,就是利用这个特性hash才会适合做索引,hash索引是通过hash算法算出位置进行一次定位,效率比较高。

    hash索引仅能满足in、=、<=>几种查询方式、hash索引每次都要遍历hash表,在数据量小的情况下没有什么关系,数据量一大反而不如B树效率高

    B树就是将索引值按一定的算法存入一个树形结构图中,如二叉树一样在root开始,依次遍历,直到获取。

    至于R树,在这里不研究。怎么样也不知道。

    mysql的默认索引是B树,hash在数据小时具有无可比拟的优势,所以很适合用来做缓存。

    本次只是对索引简单的介绍,有机会补充。

  • 相关阅读:
    常用的英文缩写
    常见的加密算法
    c# 创建socket客户端
    gvim配置到命令行可以使用
    multi-mechanize error: can not find test script: v_user.py问题
    C#类的修饰符
    淘宝-保证金缴纳的类目及对应金额(2017.3.25)
    js时间转换,能够把时间转换成yyyymmdd格式或yyyymm格式
    IP共享重新验证
    数据库自带方法
  • 原文地址:https://www.cnblogs.com/jianwind/p/9627487.html
Copyright © 2011-2022 走看看