From f16c5bfe7a11e28053d6247f62bb88e470fe3fdd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=98=BE=E4=B9=89?= <3515252188@qq.com> Date: Sat, 19 Oct 2024 17:46:14 +0800 Subject: [PATCH 1/2] test --- ...40\344\270\216\344\275\234\344\270\232.md" | 230 ++++++++++++++++++ 1 file changed, 230 insertions(+) create mode 100644 "\347\216\213\346\230\276\344\271\211/20241019 \347\264\242\345\274\225\347\273\203\344\271\240\344\270\216\344\275\234\344\270\232.md" diff --git "a/\347\216\213\346\230\276\344\271\211/20241019 \347\264\242\345\274\225\347\273\203\344\271\240\344\270\216\344\275\234\344\270\232.md" "b/\347\216\213\346\230\276\344\271\211/20241019 \347\264\242\345\274\225\347\273\203\344\271\240\344\270\216\344\275\234\344\270\232.md" new file mode 100644 index 0000000..42a03b4 --- /dev/null +++ "b/\347\216\213\346\230\276\344\271\211/20241019 \347\264\242\345\274\225\347\273\203\344\271\240\344\270\216\344\275\234\344\270\232.md" @@ -0,0 +1,230 @@ +## 一、笔记 + + + +```sql +索引:索引是一种数据结构,它的出现就是为了提高数据查询的效率。 + +以文本的形式存在磁盘中。 + +如何创建一个普通的索引(单列) + +create index idx_username on user_list(user_name); + +添加索引: + +alter table user_list add index idx_phone(phone); + +查看一个表的索引: + +show index fromuser_list; + +在建表的时候指定索引: + +create table aa( + +ID int + +index idx_id(id) + +); + +删除索引: + +drop index idx_id on aaa; + +alter table use_list drop index idx_phone; + +如何创建一个普通索引(多列) + +create index idx_uname_phone on user_list (user_name,phone); + +建立一个唯一索引(单列) + +create index idx_aaa on aaa(id); + +explain:可以查看有没有用到索引 +``` + + + +# 练习和作业 + +``` sql +-- +-- 1.给emp分别建立 普通索引和唯一索引 +select * FROM emp; +CREATE index idx_name on emp (ename); +create unique index uk_name on emp(ename); + +-- 2.查询emp表有哪些索引 + +show index from emp; + +-- 3. 使用有索引的字段进行查询,再查看这条语句是否使用到了索引。 + +explain select * from emp where ename='周泰'; + +-- 4. 删除前面建立的两个索引 + +drop index idx_name on emp; + +drop index uk_name on emp; + +-- 5. 选择两个字段添加一个复合索引 + +CREATE index idx_name on emp (ename,job); + +-- 6. 使用复合索引的字段进行查询 + +select * from emp where ename='程普' and job='文员'; + + +``` + +``` sql +-- 作业 +-- 想办法用自己的电脑,生成500万行数据,id,uname,age 尽量随机,并记录时间。 +-- 1. 不用索引查询 一次姓名uname /并记录时间 +-- 2. 建立索引查询 一次姓名uname /并记录时间 + +CREATE TABLE test_table ( + id INT AUTO_INCREMENT PRIMARY KEY, -- 自增的唯一ID,主键 + random_string VARCHAR(255), -- 存储随机生成的字符串 + random_number INT -- 存储随机生成的整数 +); + +INSERT INTO test_table (random_string, random_number) +SELECT + CONCAT(CHAR(FLOOR(65 + (RAND() * 26))), CHAR(FLOOR(65 + (RAND() * 26))), CHAR(FLOOR(65 + (RAND() * 26)))), -- 生成随机字符串 + FLOOR(RAND() * 10000) -- 生成随机整数 +FROM + (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 + UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 + UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 + UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 + UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 + UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL SELECT 29 UNION ALL SELECT 30 + UNION ALL SELECT 31 UNION ALL SELECT 32 UNION ALL SELECT 33 UNION ALL SELECT 34 UNION ALL SELECT 35 + UNION ALL SELECT 36 UNION ALL SELECT 37 UNION ALL SELECT 38 UNION ALL SELECT 39 UNION ALL SELECT 40 + UNION ALL SELECT 41 UNION ALL SELECT 42 UNION ALL SELECT 43 UNION ALL SELECT 44 UNION ALL SELECT 45 + UNION ALL SELECT 46 UNION ALL SELECT 47 UNION ALL SELECT 48 UNION ALL SELECT 49 UNION ALL SELECT 50 + UNION ALL SELECT 51 UNION ALL SELECT 52 UNION ALL SELECT 53 UNION ALL SELECT 54 UNION ALL SELECT 55 + UNION ALL SELECT 56 UNION ALL SELECT 57 UNION ALL SELECT 58 UNION ALL SELECT 59 UNION ALL SELECT 60 + UNION ALL SELECT 61 UNION ALL SELECT 62 UNION ALL SELECT 63 UNION ALL SELECT 64 UNION ALL SELECT 65 + UNION ALL SELECT 66 UNION ALL SELECT 67 UNION ALL SELECT 68 UNION ALL SELECT 69 UNION ALL SELECT 70 + UNION ALL SELECT 71 UNION ALL SELECT 72 UNION ALL SELECT 73 UNION ALL SELECT 74 UNION ALL SELECT 75 + UNION ALL SELECT 76 UNION ALL SELECT 77 UNION ALL SELECT 78 UNION ALL SELECT 79 UNION ALL SELECT 80 + UNION ALL SELECT 81 UNION ALL SELECT 82 UNION ALL SELECT 83 UNION ALL SELECT 84 UNION ALL SELECT 85 + UNION ALL SELECT 86 UNION ALL SELECT 87 UNION ALL SELECT 88 UNION ALL SELECT 89 UNION ALL SELECT 90 + UNION ALL SELECT 91 UNION ALL SELECT 92 UNION ALL SELECT 93 UNION ALL SELECT 94 UNION ALL SELECT 95 + UNION ALL SELECT 96 UNION ALL SELECT 97 UNION ALL SELECT 98 UNION ALL SELECT 99 UNION ALL SELECT 100) t; + +DELIMITER $$ + +CREATE PROCEDURE insert_million_rows() +BEGIN + DECLARE i INT DEFAULT 0; -- 计数器,初始值为0 + + WHILE i < 10000000 DO -- 当 i 小于 1000万时继续循环 + INSERT INTO test_table (random_string, random_number) + SELECT + CONCAT(CHAR(FLOOR(65 + (RAND() * 26))), CHAR(FLOOR(65 + (RAND() * 26))), CHAR(FLOOR(65 + (RAND() * 26)))), + FLOOR(RAND() * 10000) + FROM + (SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 + UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9 UNION ALL SELECT 10 + UNION ALL SELECT 11 UNION ALL SELECT 12 UNION ALL SELECT 13 UNION ALL SELECT 14 UNION ALL SELECT 15 + UNION ALL SELECT 16 UNION ALL SELECT 17 UNION ALL SELECT 18 UNION ALL SELECT 19 UNION ALL SELECT 20 + UNION ALL SELECT 21 UNION ALL SELECT 22 UNION ALL SELECT 23 UNION ALL SELECT 24 UNION ALL SELECT 25 + UNION ALL SELECT 26 UNION ALL SELECT 27 UNION ALL SELECT 28 UNION ALL SELECT 29 UNION ALL SELECT 30 + UNION ALL SELECT 31 UNION ALL SELECT 32 UNION ALL SELECT 33 UNION ALL SELECT 34 UNION ALL SELECT 35 + UNION ALL SELECT 36 UNION ALL SELECT 37 UNION ALL SELECT 38 UNION ALL SELECT 39 UNION ALL SELECT 40 + UNION ALL SELECT 41 UNION ALL SELECT 42 UNION ALL SELECT 43 UNION ALL SELECT 44 UNION ALL SELECT 45 + UNION ALL SELECT 46 UNION ALL SELECT 47 UNION ALL SELECT 48 UNION ALL SELECT 49 UNION ALL SELECT 50 + UNION ALL SELECT 51 UNION ALL SELECT 52 UNION ALL SELECT 53 UNION ALL SELECT 54 UNION ALL SELECT 55 + UNION ALL SELECT 56 UNION ALL SELECT 57 UNION ALL SELECT 58 UNION ALL SELECT 59 UNION ALL SELECT 60 + UNION ALL SELECT 61 UNION ALL SELECT 62 UNION ALL SELECT 63 UNION ALL SELECT 64 UNION ALL SELECT 65 + UNION ALL SELECT 66 UNION ALL SELECT 67 UNION ALL SELECT 68 UNION ALL SELECT 69 UNION ALL SELECT 70 + UNION ALL SELECT 71 UNION ALL SELECT 72 UNION ALL SELECT 73 UNION ALL SELECT 74 UNION ALL SELECT 75 + UNION ALL SELECT 76 UNION ALL SELECT 77 UNION ALL SELECT 78 UNION ALL SELECT 79 UNION ALL SELECT 80 + UNION ALL SELECT 81 UNION ALL SELECT 82 UNION ALL SELECT 83 UNION ALL SELECT 84 UNION ALL SELECT 85 + UNION ALL SELECT 86 UNION ALL SELECT 87 UNION ALL SELECT 88 UNION ALL SELECT 89 UNION ALL SELECT 90 + UNION ALL SELECT 91 UNION ALL SELECT 92 UNION ALL SELECT 93 UNION ALL SELECT 94 UNION ALL SELECT 95 + UNION ALL SELECT 96 UNION ALL SELECT 97 UNION ALL SELECT 98 UNION ALL SELECT 99 UNION ALL SELECT 100) t; + -- 上面的内联表生成1000条记录,每行10条,循环100次生成1000条数据 + + SET i = i + 1000; -- 每次插入1000条数据,计数器增加1000 + END WHILE; +END$$ + +DELIMITER ; + +``` + +![image-20241019172934776](https://gitee.com/njy2/picture-bed/raw/master/imgs/202410191729865.png) + +```sql +#### -- 1. 不用索引查询 一次姓名uname /并记录时间 + +select * from test_table where random_string='IOS'; + +``` + +![image-20241019173305673](https://gitee.com/njy2/picture-bed/raw/master/imgs/202410191733730.png) + +![image-20241019174008900](https://gitee.com/njy2/picture-bed/raw/master/imgs/202410191740961.png) + +``` sql +#### -- 2. 建立索引查询 一次姓名uname /并记录时间 + + +create index idx_test on test_table(random_string); +select * FROM test_table where random_string='IOS'; + +``` + +![image-20241019173731204](https://gitee.com/njy2/picture-bed/raw/master/imgs/202410191737259.png) + +```sql +-- 作业 +-- 想办法用自己的电脑,生成500万行数据,id,uname,age 尽量随机,并记录时间。 +-- 1. 不用索引查询 一次姓名uname /并记录时间 +-- 2. 建立索引查询 一次姓名uname /并记录时间 + +create table test1 +( + id int primary key auto_increment, + uname varchar(10), + age int +); + +create function rand_string(len integer) +returns text no sql +begin + declare counter int default 1; + declare str text default ''; + + if len < 1 then + return null; + end if; + + while counter <= len do + set str = concat(str, char(floor(rand() * 26) + 65)); + set counter = counter + 1; + end while; + return str; +end; + +create procedure t1() +begin + declare n int default 1000000; + while n > 0 + do + insert into test1(uname, age) values (rand_string(8), rand()*60); + set n = n - 1; + end while; +end; +call t1; +``` + -- Gitee From 63584db16d60f229170e5753c3afb547636ea154 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=8E=8B=E6=98=BE=E4=B9=89?= <3515252188@qq.com> Date: Sat, 19 Oct 2024 18:24:01 +0800 Subject: [PATCH 2/2] 2 --- ...73\203\344\271\240\344\270\216\344\275\234\344\270\232.md" | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git "a/\347\216\213\346\230\276\344\271\211/20241019 \347\264\242\345\274\225\347\273\203\344\271\240\344\270\216\344\275\234\344\270\232.md" "b/\347\216\213\346\230\276\344\271\211/20241019 \347\264\242\345\274\225\347\273\203\344\271\240\344\270\216\344\275\234\344\270\232.md" index 42a03b4..84845bc 100644 --- "a/\347\216\213\346\230\276\344\271\211/20241019 \347\264\242\345\274\225\347\273\203\344\271\240\344\270\216\344\275\234\344\270\232.md" +++ "b/\347\216\213\346\230\276\344\271\211/20241019 \347\264\242\345\274\225\347\273\203\344\271\240\344\270\216\344\275\234\344\270\232.md" @@ -165,7 +165,7 @@ DELIMITER ; ![image-20241019172934776](https://gitee.com/njy2/picture-bed/raw/master/imgs/202410191729865.png) ```sql -#### -- 1. 不用索引查询 一次姓名uname /并记录时间 +#### -- 1. 不用索引查询 一次姓名random_string /并记录时间 select * from test_table where random_string='IOS'; @@ -176,7 +176,7 @@ select * from test_table where random_string='IOS'; ![image-20241019174008900](https://gitee.com/njy2/picture-bed/raw/master/imgs/202410191740961.png) ``` sql -#### -- 2. 建立索引查询 一次姓名uname /并记录时间 +#### -- 2. 建立索引查询 一次姓名random_string /并记录时间 create index idx_test on test_table(random_string); -- Gitee