存储引擎和索引

2022-08-29  本文已影响0人  lk_erzanml

存储引擎:

Archive:用于数据存档归档;(mongodb可以代替)
压缩率高;插入快,查询慢;
Memory引擎:内存(redis代替)
myisam:
不支持外键事物;只支持表锁;节省资源,消耗少,适合简单业务;
innodb:
支持事物;支持外键;支持行锁;并发写,事物,更大资源;

索引

优点

提高查询效率

缺点

降低更新表的速度

分类

按功能:普通索引,唯一索引,主键索引,全文索引
按物理实现方式:聚簇和非聚簇
按照作用字段个数:单列索引和联合索引

sql8.0支持降序索引

隐藏索引,相当于伪删除,等确认无误之后再彻底删除这个索引

适合创建索引的情况

  1. 唯一值的,适合创建唯一索引;
  2. 频繁被where作为条件的;
  3. 正常group by 或者order by的适合创建单列索引或者组合索引;
  4. 散列度高的适合创建索引
  5. 使用频率最高的放在联合索引的最左边

不适合创建索引的情况

  1. where等条件使用不到的
  2. 数据量小
  3. 散列度低的
  4. 不建议用无序的值建立索引(uuid)

生成随机数

DELIMITER $
CREATE FUNCTION rand_string(n INT)
    RETURNS VARCHAR(255)
BEGIN 
    DECLARE chars_str VARCHAR(100) DEFAULT 
'abcdefghijklmnopqrstuvwxyzABCDEFJHIJKLMNOPQRSTUVWXYZ';
    DECLARE return_str VARCHAR(255) DEFAULT '';
    DECLARE i int default 0;
    WHILE i<n DO 
        SET return_str=CONCAT(return_str,SUBSTRING(chars_str,FLOOR(1+RAND()*52),1));
        SET i=i+1;
    END WHILE;
    RETURN return_str;
END $
DELIMITER;

set global log_bin_trust_function_creators=1;

select rand_string(10);
delimiter $
create function rand_num(from_num int,to_num int) returns int(11)
BEGIN
declare i int default 0;
set i=floor(from_num+rand()*(to_num-from_num+1));
return i;
end $ 
delimiter;

select rand_num(10,100);
#插入大量数据
delimiter $
create procedure insert_stu1(start int,max_num int)
BEGIN
declare i int default 0;
set autocommit =0;
REPEAT
set i=i+1;
insert into student(stuno,name,age,classid)VALUES((start+i),rand_string(6),rand_num(10,100),rand_num(10,1000));
until i=max_num
end repeat;
commit;
end $
delimiter;

call insert_stu1(100001,4000000);
image.png
image.png
image.png
image.png
image.png
image.png
上一篇 下一篇

猜你喜欢

热点阅读