索引的使用

8人阅读 评论(0) 收藏 举报
分类:

好记性不如乱笔头
当一张表中包含了千万级别的数据时,查询的速度比乌龟爬快不了多少。这个时候就需要索引了。

直接开干
1. 表结构入下,password写成了passwrd,懒得改了,勿喷。
这里写图片描述

  1. 咱们就插入1000万条数据吧,怎么插入呢?可别想着一条一条的插入啊,保证你不会砸电脑,哈哈。
    a. 存储过程,这个知识吗,还给大学老师了。
    b. java代码直接插入(提交事务的方式,速度还挺快的)。
    直接上代码,亲测插入1000条万数据100秒。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 public class MyTest {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        final String url = "jdbc:mysql://localhost:3306/school?characterEncoding=UTF-8";
        final String name = "com.mysql.jdbc.Driver";
        final String user = "root";
        final String password = "fx19950103";
        Connection conn = null;
        Class.forName(name);//指定连接类型
        conn = DriverManager.getConnection(url, user, password);//获取连接
        if (conn!=null) {
            System.out.println("获取连接成功");
            insert(conn);
        }else {
            System.out.println("获取连接失败");
        }

    }
    public static void insert(Connection conn) {
        // 开始时间
        Long begin = new Date().getTime();
        // sql前缀
        String prefix = "INSERT INTO user (name,passwrd) VALUES ";
        try {
            // 保存sql后缀
            StringBuffer suffix = new StringBuffer();
            // 设置事务为非自动提交
            conn.setAutoCommit(false);
            // 比起st,pst会更好些
            PreparedStatement pst = (PreparedStatement) conn.prepareStatement("");//准备执行语句
            // 外层循环,总提交事务次数
            for (int i = 1; i <= 1000; i++) {
                suffix = new StringBuffer();
                // 第j次提交步长
                for (int j = 1; j <= 10000; j++) {
                    // 构建SQL后缀
                    suffix.append("('" +"fx"+(i*j)+"','p" +(i+j)+"'"+"),");
                }
                // 构建完整SQL
                String sql = prefix + suffix.substring(0, suffix.length() - 1);
//                System.out.println(sql);
                // 添加执行SQL
                pst.addBatch(sql);
                // 执行操作
                pst.executeBatch();
                // 提交事务
                conn.commit();
                // 清空上一次添加的数据
                suffix = new StringBuffer();
            }
            // 头等连接
            pst.close();
            conn.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        // 结束时间
        Long end = new Date().getTime();
        // 耗时
        System.out.println("1000万条数据插入花费时间 : " + (end - begin) / 1000 + " s");
        System.out.println("插入完成");
    }
}
  1. 现在我们查询name = ‘fx77777777777’【这个数据是我随便在里面改的一条】
select * from `user` where name = 'fx77777777777'

亲测,花了6.03秒。我的天,这么久,不能忍啊。

  1. 大招,建立索引。
    ALTER TABLEuserADD INDEX index_name (name)
    index_name是索引的名字,’name‘是字列名。
    亲测,建立索引很耗费时间,花了46秒。
    然后再查询一次,很神奇的发现仅仅只花了0.003秒,真牛叉。

小提示:就只是很简单的使用了一般索引,还有别的索引类型哦,索引还有挺多要注意的地方,自己查资料吧。

查看评论

如何在数据库中使用索引 【数据库高效编程 - 学习笔记 第七章】

多数数据库,使用 B 树(Balance Tree)的结构来保存索引。 B 树, 最上层节点:根节点 最下层节点:叶子节点 两者之间的节点:中间节点 B 树,显著特征:从根节点,到各个叶...
  • zhangwenan2010
  • zhangwenan2010
  • 2012-11-22 22:45:44
  • 8519

SQL 索引的用法

下面测试的数据是3852916条记录。测试环境是 os:windows xp sp2, 内存:1G,cpu:双核 2.66 GHZ。(1)ItemTransaction 表什么都没有,没有主键,没有外...
  • wobuwei
  • wobuwei
  • 2009-08-26 11:44:00
  • 4358

在Oracle中索引的使用

索引是由Oracle维护的可选结构,为数据提供快速的访问。准确地判断在什么地方需要使用索引是困难的,使用索引有利于调节检索速度。 当建立一个索引时,必须指定用于跟踪的表名以及一个或多个表列。一旦建立了...
  • ysyn1209
  • ysyn1209
  • 2016-04-22 23:44:53
  • 8847

mysql之正确使用索引

创建索引的几种方式Mysql目前主要有以下几种索引方式:FULLTEXT,HASH,BTREE,RTREE。 那么,这几种索引有什么功能和性能上的不同呢?详情点击下面链接: http://blog...
  • jiang13479
  • jiang13479
  • 2017-01-16 14:34:10
  • 1250

oracle合理的使用索引原则

原则: 首先,看是否用上索引。对于该使用索引而没有用上索引的sql,应该想办法用上索引,避免全表扫描。 其次,看是否用上了合理的索引,特别是复杂的sql语句,当其中where子句包含多个带有索引的...
  • zhengyang7754
  • zhengyang7754
  • 2016-01-29 15:06:58
  • 609

如何监控索引的使用.

  • 2009年09月21日 13:13
  • 59KB
  • 下载

数据库索引的使用

实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index...
  • jianxuanlu
  • jianxuanlu
  • 2008-06-13 11:19:00
  • 8092

数据库性能优化(强制使用索引查询)

A:索引的使用--数据库的执行效率很大程度上取决余索引的建立,具体建索引原则,很多文章都有介绍,略.--主要介绍一些用SQL语句建索引的方法,和维护索引的方法:/*建索引*/--建普通索引create...
  • lee576
  • lee576
  • 2007-02-07 21:46:00
  • 4251

mysql强制使用指定索引查询

mysql强制指定索引查询语法: select * from table_name force index (index_name) where conditions;#########mysql强...
  • zixiao217
  • zixiao217
  • 2017-08-14 17:22:10
  • 1574

使用ORACLE索引的一些小技巧

 索引对数据库访问的性能的作用十分巨大,设计合理的索引对于系统性能调整至关重要。而使用索引又是数据库开发过程   中最困难的一点。在设计索引的时候要注意以下几个方面: l         在OLTP系...
  • wyzxg
  • wyzxg
  • 2008-08-27 00:27:00
  • 2937
    个人资料
    持之以恒
    等级:
    访问量: 981
    积分: 208
    排名: 90万+