505 Games:《死亡擱淺 導剪版》玩家答疑會開啟
阿新 • • 發佈:2022-03-08
學習參考地址:https://www.bilibili.com/video/BV1Kr4y1i7ru?p=87
1.表、資料準備
2.索引學習
1.表、資料準備
SHOW CREATE TABLE student;
CREATE TABLE `student` ( `id` int NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `age` int DEFAULT NULL, `address` varchar(100) DEFAULT NULL, `create_time` datetime DEFAULT NULL, `create_user` varchar(50) DEFAULT NULL, PRIMARY KEY (`id`), KEY `tb_index_student_name` (`name`), KEY `tb_index_student_age` (`age`), KEY `tb_index_student_address` (`address`), KEY `tb_index_student_name_age_address` (`name`,`age`,`address`) ) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8mb3
資料準備,插入10萬條資料,測試用
DELIMITER $$ USE `school`$$ DROP PROCEDURE IF EXISTS `my_insert`$$ CREATE DEFINER=`root`@`%` PROCEDURE `my_insert`() BEGIN DECLARE i INT DEFAULT 100000; WHILE i>0 DO IF i<=30000 THEN INSERT INTO student(NAME,age,address,create_time,create_user) VALUE(CONCAT('ligy',i),33,CONCAT('南昌',i),NOW(),UUID()) ; ELSEIF i<20 THEN INSERT INTO student(NAME,age,address,create_time,create_user) VALUE(CONCAT('ruirui',i),1,CONCAT('深圳',i),NOW(),UUID()) ; ELSE INSERT INTO student(NAME,age,address,create_time,create_user) VALUE(CONCAT('ruifen',i),25,CONCAT('梅州',i),NOW(),UUID()) ; END IF; SET i := i -1; END WHILE; END$$ DELIMITER ;
2.索引學習
-- ----------索引-------------------------------------------------------------------------------- B tree B+ tree HASH tree -- ----------索引操作-------------------------------------------------------------------------------- -- 索引操作:查詢、新增、修改 -- 建立索引 CREATE INDEX tb_idx_course_name ON course(NAME) -- 查詢索引 SHOW INDEX FROM course; -- 刪除索引 DROP INDEX tb_idx_course_name ON course; CREATE INDEX tb_index_student_name ON student(NAME); CREATE INDEX tb_index_student_age ON student(age); CREATE INDEX tb_index_student_address ON student(address); CREATE INDEX tb_index_student_name_age_address ON student(NAME,age,address); -- -----------sql分析------------------------------------------------------------------------------- -- sql執行頻率,_______ 是7個下劃線,代表7個字元 SHOW GLOBAL STATUS LIKE 'COM_______' SHOW GLOBAL STATUS LIKE 'COM_SELECT' -- 查詢是否支援 YES支援 SELECT @@have_profiling; -- 預設0 關閉 SELECT @@profiling; SET @@profiling=1; -- 查詢sql消耗時間 SHOW PROFILES -- 查詢某sql某語句具體耗時 SHOW PROFILE FOR QUERY 4 SHOW PROFILE CPU FOR QUERY 4 -- 查詢執行計劃,包括:是否走索引,索引長度,id; id不同,越大越先執行,id一樣,排前面的先執行; EXPLAIN SELECT * FROM student WHERE NAME='ruifen88888' AND age=25; -- 查詢 SELECT * FROM student WHERE id=1 -- -----------sql優化------------------------------------------------------------------------------- -- 規則:最左字首法制 -- 規則:範圍查詢<> 右邊的列,不會走索引 EXPLAIN SELECT * FROM student WHERE NAME='ruifen100000' AND age>=25 AND address='地球人,都是' EXPLAIN SELECT * FROM student WHERE age>=25 AND address='地球人,都是' EXPLAIN SELECT * FROM student WHERE NAME='ruifen100000' EXPLAIN SELECT * FROM student WHERE age=25 EXPLAIN SELECT * FROM student WHERE address='地球人,都是' -- 運算,索引會失效 -- where條件,不加引號,索引失效 -- 模糊查詢,尾部,索引不失效,比如:aa% -- %a 模糊查詢,索引失效 EXPLAIN SELECT * FROM student WHERE address=12 EXPLAIN SELECT * FROM student WHERE SUBSTRING(address,1,2)='地球' EXPLAIN SELECT * FROM student WHERE address LIKE '地球%' -- 不失效 EXPLAIN SELECT * FROM student WHERE address LIKE '%地球' -- 失效 -- 不用select * ,因為* 走索引了,也會有回表查詢的動作 -- 因為這幾個欄位,都在索引之中,不用回表查詢,效率很高 EXPLAIN SELECT id,NAME,age,address FROM student WHERE NAME='ruifen100000' AND age=25 AND address='地球人,都是' -- 走索引查詢了,但是會有回表查詢,消耗了時間 EXPLAIN SELECT * FROM student WHERE NAME='ruifen100000' AND age=25 AND address='地球人,都是' -- 查詢sql消耗時間,通過這可以檢視,消耗的時間,多了 SHOW PROFILES