MySQL——索引的使用对查询、插入速度的影响
来源:互联网 发布:曲面电视优缺点知乎 编辑:程序博客网 时间:2024/05/29 18:54
一.什么是索引?
1.索引:索引是对数据库中一列或者多列的值进行排序的一种数据结构。
2.索引的作用:索引的作用是为了提高查询的速度。
3.几个特点:
- ①MySQL中,主键和唯一约束自带索引;
- ②在查询时,只有使用到有索引的列,才能提高查询速度;
- ③索引会降低插入速度,数据量越大,插入速度越慢。
4.索引的算法:Hash和Btree
- Hash索引:适合等值查找,在范围查找时有可能发生Hash冲突;
- Btree索引:适合范围查找,没有Hash冲突问题。
二.验证索引对查询、插入速度的影响
实验工具:
- Nacivat for MySQL
- eclipse
实验步骤:
(一)实验环境建立:
1.使用 Nacivat for MySQL 创建表格 tb_Test;
其中,id为检测列,即用于插入索引的列。
2.利用eclipse连接MySQL操作表格 tb_Test ;
①eclipse代码:
package forJDBC;import static org.junit.Assert.*;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import org.junit.After;import org.junit.Before;import org.junit.Test;public class Boker { private Connection conn; @Before public void setUp() throws Exception { conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/for1703", "root", "root"); } @After public void tearDown() throws Exception { conn.close(); } @Test public void testInsert() throws SQLException { this.insertS(); } private void insertS() { try { Statement stat=conn.createStatement(); StringBuilder sb=new StringBuilder(); for(int i=0;i<500;i++) { sb.append("('idxxx"+i+"',"+(i+1)+")"); if(i!=499) { sb.append(","); } } String sql="insert into tb_Test (id,idNumber) values"+sb.toString(); int num=stat.executeUpdate(sql); System.out.println(num); } catch (SQLException e) { e.printStackTrace(); } } @Test public void testSearch() throws SQLException { this.searchS(); } private void searchS() throws SQLException { Statement stat=conn.createStatement(); String sql="select * from tb_Test where id='idxxx255'"; ResultSet rs=stat.executeQuery(sql); while(rs.next()) { System.out.println(rs.getString("id")+"\t"+rs.getInt("idNumber")+"\t"); } } @Test public void testDelete(){ this.deleteS(); } private void deleteS() { try { Statement stat =conn.createStatement(); String sql="delete from tb_Test"; System.out.println(stat.executeUpdate(sql)); } catch (SQLException e) { e.printStackTrace(); } }}
②运行 testInsert( ) 向表中插入500条数据,其中id=“idxxx”+(idNumber-1):
(二)验证过程:
1.当 id 列未添加索引时,运行 testSearch( ) 方法,查找“idxxx255”,耗费2.880s;
2.应用Navicat for MySQL对id列添加索引,再次查找“idxxx255”,耗时1.036s;
※发现:查找相同内容,有索引时可以大大缩短查询时间。
3.运行 testDelete( ) 删除表内记录,并删去索引;
4.更改代码中i值为10000,再次运行 testInsert( ),向没有索引的表中插入10000组数据,耗时1.371s;
5.再次运行 testDelete( ) 删除所有数据后,对 id 列添加索引后,再次插入500组同样的数据,耗时1.817s;
※发现:插入相同数据,无索引比有索引时速度快一些。
三.结论
经过验证,索引的使用对查询和插入速度有以下影响:
- 查询时,使用带有索引的列可以明显提高查询速度;
- 插入时,如果插入的列有索引,插入速度会减慢。
四.分析讨论
经过本次实验,在以后创建表格时,尽量保证将主要的数据都插入之后,再添加索引,避免在添加索引之后进行数据插入,以保证效率最高。
注意:删除时,要把代码前面的插入和查询代码注释掉,防止删除失败。
- MySQL——索引的使用对查询、插入速度的影响
- 索引对提高查询速度的影响
- mysql中的索引对查询的影响
- mysql的存储引擎innodb、myisam对插入影响和索引对插入的影响
- MySQL索引不仅影响查询速度而且影响查询结果的排序
- 索引与查询速度之间的影响
- Mysql查询语句中的引号对索引的影响
- MySQL索引对数据库查询速度的显著提升
- 索引对查询条件顺序的影响
- 索引对查询条件的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 索引对查询条件顺序的影响
- 01背包问题
- 从零开始python小案例003计算北京市个人所得税
- DenseCap:Fully Convolutional Localization Networks for Dense Captioning
- 【2017年cs231n学习笔记1】Lecture2 K近邻 距离度量 超参数 交叉验证 线性分类器
- Java.11.03
- MySQL——索引的使用对查询、插入速度的影响
- ABP官方文档(四十一)【ASP.NET Core】
- Leetcode 303
- Centos7 配置 JDK8
- 【LintCode-93】平衡二叉树(Java实现-递归算法)
- ABP官方文档(四十二)【CSRF和XSRF保护】
- [LeetCode] Maximum Subarray
- hadoop源码阅读之mapreduce再理解
- react native 的赋值比较,空字符串以及undefined