-- 刪除歷史存儲過程 DROP PROCEDURE IF EXISTS `insert_t_user`
-- 創(chuàng)建存儲過程 delimiter $
CREATE PROCEDURE insert_t_user(IN limit_num int) BEGIN DECLARE i INT DEFAULT 10; DECLARE id_no varchar(18) ; DECLARE username varchar(32) ; DECLARE age TINYINT DEFAULT 1; WHILE i < limit_num DO SET id_no = CONCAT("NO", i); SET username = CONCAT("Tom",i); SET age = FLOOR(10 + RAND()*2); INSERT INTO `t_user` VALUES (NULL, id_no, username, age, NOW()); SET i = i + 1; END WHILE;
END $ -- 調(diào)用存儲過程 call insert_t_user(100); 關(guān)于存儲過程的創(chuàng)建和存儲,可暫時不執(zhí)行,當(dāng)用到時再執(zhí)行。
-- 內(nèi)存計算,得知要查詢的id為1 explain select * from t_user where id = 1 ; -- 參數(shù)側(cè)計算 explain select * from t_user where id = 2 - 1 ; 第三種索引失效情況:索引列參與了運算,會導(dǎo)致全表掃描,索引失效。
4 索引列參使用了函數(shù) 示例:
explain select * from t_user where SUBSTR(id_no,1,3) = '100';
explain select id from t_user order by age; explain select id , username from t_user order by age; explain select id_no from t_user order by id_no; 上述三條SQL語句都是走索引的,也就是說覆蓋索引的場景也是可以正常走索引的。
現(xiàn)在將id和id_no組合起來進(jìn)行order by:
explain select * from t_user order by id,id_no desc; explain select * from t_user order by id,id_no desc limit 10; explain select * from t_user order by id_no desc,username desc;