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在数据小时具有无可比拟的优势,所以很适合用来做缓存。

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

  • 相关阅读:
    poj1273
    JavaSE入门学习23:Java面向对象之构造方法
    NOI 2015 滞后赛解题报告
    LuaInterface简单介绍
    解决在onCreate()过程中获取View的width和Height为0的4种方法
    函数指针和指针函数
    Quartz-中断正在执行的任务
    servlet3.0获取参数与文件上传代码示例
    Servlet学习:(三)Servlet3.0 上传文件
    layui 批量上传文件 + 后台 用servlet3.0接收【我】
  • 原文地址:https://www.cnblogs.com/jianwind/p/9627487.html
Copyright © 2011-2022 走看看