zoukankan      html  css  js  c++  java
  • mysql 优化【1】

    报表需求1:从六千多万条数据中找需要的top100

    方法:1.mysql explain 2.索引

    由于数据量大,因此我们需要通过索引的方式降低搜索时间,不加索引FineReport直接报了sql时间过长的错误。

    因此在对应的月份、用户等字段加了联合索引(保证这些选取的字段不为空,联合索引有最左匹配的说法,空了就全表搜了)

    加完索引时间从没法搜降到了五秒左右。

    报表需求2:从六千多万条数据*n月中找sum、avg等最大的top100

     sum、avg通过索引也可以降低执行时间。个人想法是通过地区表通过exist的方式计算哪些可选项,但是。。。可能还是比较麻烦,那就算了

    同事:几千万条,从sql入手还是太慢了,想别的办法

    待续。。。

     报表需求三:几个筛选项不要筛出空的结果

    通常方法:distinct,其原理为sort+逐行迭代排序,所以输出有序,但会全文件排序。由于数据量过大,慢的一批

    解决方法:1.group by,依然慢的一批。

      2.索引+exists (select prov_name from dim_area where prov_name='xxx')极快,因此通过附加的地区表与子查询查到哪些地区有数据,把这些作为结果。

    总结:不要用会导致全表查的操作,建议通过select+索引的奇怪操作来做(走索引 走索引 走索引!)。

    mysql explain

     https://www.cnblogs.com/tufujie/p/9413852.html

    explain出来的信息有10列,分别是id、select_type、table、type(对表访问类型)、possible_keys(可能使用的索引)、key(实际索引)、key_len、ref、rows(扫描出的行数,估算的行数)、Extra

    mysql 联合索引

    多个字段同时建立的索引(有顺序,ABC,ACB是完全不同的两种联合索引)(abc就是建a/ab/abc三个索引)

    1.最左匹配

      如abc,先匹配a,再bc,如果直接bc会不使用索引

    2.最常用、筛选数据最多的字段放前边

    mysql 索引btree hash

     hash索引一次就能定位,btree需要从根节点到叶子节点,最后才到具体页

    所以hash快,但是其缺点是:1.不支持范围查询(between),只支持(=、in、<=>)

      2.btree可排序,hash不可以

      3.hash组合索引,通过所有的加一块,才算hash,所以只拿前几个进行搜索,不走索引

      4.当遇见大量Hash值相等的情况,hash不一定比btree快

    mysql 索引 <=>、in、not in

     小数据量不走索引,大的走,所以还是通过explain看比较好

  • 相关阅读:
    Android导包导致java.lang.NoClassDefFoundError
    canvas
    [java]OutOfMemoryError 原因及解决办法
    [转]加速Android Studio/Gradle构建
    本地Tomcat配置ssl 实现https访问
    机器学习中的无监督学习
    SQL 创建数据库、表以及索引
    海马玩模拟器共享文件夹导入导出图文教程
    Java-SDK-图像识别实现身份证照片获取信息
    Java中的平方
  • 原文地址:https://www.cnblogs.com/tillnight1996/p/12787877.html
Copyright © 2011-2022 走看看