1. 程式人生 > 遊戲 >505 Games:《死亡擱淺 導剪版》玩家答疑會開啟

505 Games:《死亡擱淺 導剪版》玩家答疑會開啟

學習參考地址: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