日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

redis value多大会影响性能_事务对MySQL性能有什么影响?有无索引查找对其影响有多大?...

發布時間:2025/3/13 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 redis value多大会影响性能_事务对MySQL性能有什么影响?有无索引查找对其影响有多大?... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

推薦學習

  • 阿里P8MySQL,基礎/索引/鎖/日志/調優都不誤,一鍋深扒端給你
  • 抖音后端123面開掛,全靠這份啃了58天的「Java進階核心知識集」
  • 肝了30天,整出這份[分布式寶典:限流+緩存+通訊],秋招跳槽有望

1、插入測試

在此次測試中數據庫表有三個字段,id(自增主鍵)、username、password。

1.1 插入耗時實測

實測:

  • 插入30多萬條數據,采用一次事務提交一條sql語句,耗時2小時以上,具體沒統計,因為計劃是這樣插入2000萬條數據的,但由于太慢提前終止了,所以插入30多萬條數據。
  • 插入2000萬條數據,采用一次事務提交10萬條sql語句,耗時50多分鐘,將近1小時(若是老鐵們做這樣的實驗,可以加上一個時間對象,這樣可以看的更加清晰)。

1.2 TestDemo

1.3 測試代碼:

1.3.1 MybatisTest

import mapper.TestMapper;import org.apache.ibatis.io.Resources;import org.apache.ibatis.session.SqlSession;import org.apache.ibatis.session.SqlSessionFactory;import org.apache.ibatis.session.SqlSessionFactoryBuilder;import po.TestBean;import java.io.IOException;import java.io.InputStream;public class MybatisTest { public static void main(String[] args) throws IOException { //1.讀取配置文件 InputStream in = Resources.getResourceAsStream("mybatis.xml"); //2.創建SqlSessionFactory工廠 SqlSessionFactoryBuilder builder = new SqlSessionFactoryBuilder(); SqlSessionFactory factory = builder.build(in); //3.使用工廠生產SqlSession對象 SqlSession session = factory.openSession(); //4.使用SqlSession創建Dao接口的代理對象 TestMapper testMapper = session.getMapper(TestMapper.class); //5.使用代理對象執行方法 TestBean testBean =new TestBean(); for (int i = 10; i<20000000 ;i++){ testBean.setName("lbw"+i); testBean.setPassword("nb"+i); testMapper.saveTest(testBean);// //1次操作 提交1次事務// session.commit(); // 100000次操作提交1次事務 if (i%100000 == 0){ session.commit(); } } //6.釋放資源 session.close(); in.close(); }}

1.3.2 TestBean

package po;import java.io.Serializable;public class TestBean implements Serializable { String id; String name; String password; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @Override public String toString() { return "po.TestBean{" + "id='" + id + ''' + ", name='" + name + ''' + ", password='" + password + ''' + '}'; }}

1.3.3 TestMapper

package mapper;import org.apache.ibatis.annotations.Insert;import org.apache.ibatis.annotations.Select;import po.TestBean;public interface TestMapper { @Insert("insert into test200411(name,password) values(#{name},#{password})") void saveTest(TestBean t); @Select("select id,name,password from test200411 where id = #{s}") TestBean selectById(String s);}

1.3.4 mybatis.xml(mybatis配置文件)

<?xml version="1.0" encoding="UTF-8"?>

1.4 過程體驗

程序運行后在幾個小時時間里,電腦處于烤機(烤雞誘惑,烤雞pg是塊寶)狀態!!!很遺憾的是,當時沒有截圖程序運行了的時間,不過1.1結論是數據是保真的,實在不想再搞幾千萬條數據在數據庫了。

1.5 數據量

1.5.1 計數用時

使用 select count(0) from test200411 進行計數,統計查詢用時:13.7s,得到統計數: 20379620,之所以是20379620,是因為我測試中先插入30多萬,之后再插入2000萬。數據是不會騙人的哦,沒毛病吧,鐵子們。

1.5.2 占用硬盤空間

  • 硬盤空間占用為:1.47GB(1585455597 B)。
  • 分析一下,我的表字段只有3個,且每個字段里面實質存儲的數據長度都不長。151585455597 B / 20379620 = 77 B
    這樣算下每一行數據平均占用77B,這個數據一看就知道,存儲過程中應該是有數據壓縮的,這一結論不太嚴謹,有大佬知道mysql底層存儲的話,望指導一下。

2、索引查詢測試

2.1 索引檢測

使用 show index from test200411可以查到當前表擁有的索引,當前只有我自己自增id的默認索引,和我自己建立的id字段索引。

2.2 對有無索引的字段where查詢比較

2.2.1 無索引字段

使用 SELECT * from test200411 where password = "nb1234"查詢到兩條數據,耗時:57.9s,明顯這個查詢時間是不可取的

  • 小結論:所以在大表查詢我們為什么需要及其注重性能了,平常若是做個小的測試系統,數據量撐死幾千,查詢時,根本就感覺不出時間上的差異。這也是為什么我們需要那么多數據庫優化的策略,索引、分庫分表、主從復制、讀寫分離、緩存設計等等。
  • 為什么會這么慢呢,因為該字段沒有索引的話,它就需要一行一行的去做比對,這樣做,不僅比對長,磁盤io也多。

2.2.1 有索引字段

使用:SELECT * from test200411 where id = 2566345查詢到唯一數據,耗時:0.133s

  • 這個根據索引查詢數據的時間和無索引字段查詢時間比較,由實質數據得到它們之間性能差了500多倍。
  • 為什么索引這么快?因為索引底層是b+樹,所以索引是按照一定的大小順序來排序的,根據索引查詢,能減少磁盤io,也能減少比對次數。

2.3 建立索引

2.3.1 索引創建

使用:CREATE INDEX paw_index ON test200411(password)耗時:156.0s

2.3.2 索引查詢

再次查看已經索引,可以看到一個paw_index 的新索引,這就是我們剛剛創建的索引。

2.3.3 查詢新建立索引字段

使用 SELECT * from test200411 where password = "nb12345"耗時:0.110s可以將此條sql和 2.2.1 比較 ,除了匹配的字符串不一樣(之所以用了不同的字符串,是因為實驗是連著做的,同一條字符串查詢,會有緩存,影響結果),其他都是一樣的。可以看到它們之前驚人的查詢速度差異,速度相差大概是500倍。

3、總結

3.1 事務對數據庫性能影響

在一個事務內只提交一條sql和在一個事務內提交多個sql,對數據庫數據的批量處理影響是很大的。一個事務內提交多個sql可以提高批量數據的處理速度。

3.2 數據庫索引對數據庫查詢性能分析

通過上面的實例,我們可以看到,有無索引對數據庫查詢速度的影響是很大的,實驗中它們速度差異可以到500倍,當然這是取決的實驗過程中的數據量,而我們的實驗數據量有2000多萬行,也正是這樣才能放大對 有無索引對數據庫查詢的影響 效果。

總之,通過這個實例不會有人還沒搞懂索引這個東西的重要性和其作用吧!不會吧?不會吧?當然我這沒將索引的三板斧,“是什么,為什么需要,怎么做”,全列出來,我覺得寫也的還行,帶有實例出發,通俗易懂吧!!

這個實驗從上到下都是可以復現的,代碼和過程都有,有興趣的小伙伴可以嘗試復現一下,讓自己對索引的理解加深。

作者: 小小卡爾

原文鏈接:https://blog.csdn.net/weixin_44185736/article/details/105454820

總結

以上是生活随笔為你收集整理的redis value多大会影响性能_事务对MySQL性能有什么影响?有无索引查找对其影响有多大?...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。