1.性能测试脚本
#!/bin/bash
HOSTNAME="IP"
PORT="3306"
USERNAME="root"
PASSWORD=""
DBNAME="database"
TABLENAME="tablename"
for((i=1;i<=1000000;i++));
do
insert_sql="insert into ${TABLENAME} values('$i+testtsestrststt',$i)"
mysql -h${HOSTNAME} -P${PORT} -u${USERNAME} ${DBNAME} -e "${insert_sql}"
done
2.索引的本质以及原理
建立数据库,数据库信息如下
字段名 数据类型 大小
id (Primary key) Unsigned INT 4 bytes
firstName Char(50) 50 bytes
lastName Char(50) 50 bytes
emailAddress Char(100) 100 bytes
表名person_tb
person_tb中有5000000行数据,每行记录r=204kb而且使用MyISAM引擎存储(默认数据块大小,1024kb/块,数据库数据在磁盘上是以块为单位进行数据存储),每个磁盘块存储记录=1024/204=5条记录,person_tb磁盘数目=5000000/5=1000000块。
如果现在根据字段lastName查询数据,这时候没有加索引,需要每个磁盘块都要加载一次,总共1000000次IO操作,性能很差劲了。
-------------------------------------------------
建立了一个长R = 54字节的索引,并且使用默认磁盘块大小为1,024字节。那么该索引的块因子为bfr = (B/R) = 1024/54 = 18 条记录每磁盘块。容纳这个索引表总共需要的磁盘块为N = (r/bfr) = 5000000/18 = 277,778 块。
------------------------------------------------
现在使用FirstName字段来进行搜索就可以利用索引来提高性能。这允许使用一个二分查找,平均log2 (277778) = 18.08 -> 19次数据块访问。找到实际记录的地址,这需要进一步的块读取,这样总数达到19 + 1 = 20次数据块访问,这和非索引表的数据块访问次数有天壤之别。
根本原理总结:通过不断的缩小查询范围,同时把随机的事件变成顺序的事件,也就是不断的通过一种查询方式来获取数据
---------------------------------------------------------------------------------------------------------------------------------------------------------------------
https://blog.csdn.net/qq_37350706/article/details/81707862
https://www.cnblogs.com/effortscodepanda/p/7631722.html
https://blog.csdn.net/qq939782569/article/details/87344602
alter user 'root'@'localhost' identified with mysql_native_password by '123456'; https://www.cnblogs.com/zichuan/p/9203129.html