MySQL哪些情況需要新增索引?
來源:MySQL資料庫聯盟
這篇文章+執行計劃,都掌握的話,我們可以最佳化80%的SQL了。
use martin; /* 使用martin這個database */
drop table if exists index_test_04; /* 如果表index_test_04存在則刪除表index_test_04 */
CREATE TABLE `index_test_04` (
`id` int NOT NULL AUTO_INCREMENT,
`a` int DEFAULT NULL,
`b` int DEFAULT NULL,
`c` int DEFAULT NULL,
`d` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_a` (`a`),
KEY `idx_b_c` (`b`,`c`)
) ENGINE=InnoDB CHARSET=utf8mb4;
drop procedure if exists insert_index_test_04; /* 如果存在儲存過程insert_index_test_04,則刪除 */
delimiter ;;
create procedure insert_index_test_04() /* 建立儲存過程insert_index_test_04 */
begin
declare i int; /* 宣告變數i */
set i=1; /* 設定i的初始值為1 */
while(i<=100000)do /* 對滿足i<=100000的值進行while迴圈 */
insert into index_test_04(a,b,c,d) values(i,i,i,i); /* 寫入表index_test_04中a、b兩個欄位,值都為i當前的值 */
set i=i+1; /* 將i加1 */
end while;
end;;
delimiter ; /* 建立批次寫入100000條資料到表index_test_04的儲存過程insert_index_test_04 */
call insert_index_test_04(); /* 執行儲存過程insert_index_test_04 */
insert into index_test_04(a,b,c,d) select a,b,c,d from index_test_04;
insert into index_test_04(a,b,c,d) select a,b,c,d from index_test_04;
/* 把index_test_04的資料量擴大到40萬 */
create table index_test_05 like index_test_04;
insert into index_test_05 select * from index_test_04;
select * from index_test_04 where d = 1000;
select * from index_test_04 where a = 1000;
explain select * from index_test_04 where d = 1000;explain select * from index_test_04 where a = 1000;
select max(d) from index_test_04;
select max(a) from index_test_04;
select count(*) from index_test_04;
explain select count(*) from index_test_04;
select * from index_test_04 order by a limit 10 ;
select * from index_test_04 order by d limit 10 ;
explain select * from index_test_04 order by a limit 10;
explain select * from index_test_04 order by d limit 10;
select * from index_test_04 order by b,c limit 10;
explain select * from index_test_04 order by b,c limit 10;
explain select a,d from index_test_04 where a=900;
explain select b,c from index_test_04 where b=1000;
explain select * from index_test_04 tb1 inner join index_test_05 tb2 on tb1.a = tb2.a;
explain select * from index_test_04 tb1 inner join index_test_05 tb2 on tb1.d = tb2.d;
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70027826/viewspace-2995113/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql索引失效的情況MySql索引
- mysql索引不會命中的情況MySql索引
- Mysql 會導致索引失效的情況MySql索引
- MYSQL索引失效的各種情況小結MySql索引
- 探究哪些情況下企業需要部署CRM系統?
- ORACLE索引被抑制情況Oracle索引
- 簡單介紹MySQL索引失效的幾種情況MySql索引
- mysql新增索引MySql索引
- ORACLE MYSQL中join 欄位型別不同索引失效的情況OracleMySql型別索引
- IT職場:哪些情況下需要進行詳細的價值流分析?
- oracle order by索引是否使用的情況Oracle索引
- 恆訊科技哪些情況需要立即更換美國伺服器的IP?伺服器
- Oracle什麼情況下需要rebuild indexOracleRebuildIndex
- PLinq不需要鎖的情況
- Mysql 可能鎖表的情況MySql
- [zt] Oracle不使用索引的幾種情況Oracle索引
- oracle組合索引什麼情況下生效?Oracle索引
- 什麼情況下需要建立索引? 索引的作用?為什麼能夠提高查詢速度?(索引的原理) 索引有什麼副作用嗎?索引
- SQL優化--強制走索引失效的情況SQL優化索引
- 從哪些指標衡量客服的工作情況指標
- Oracle like、不等於、隱式轉換走索引與不走索引情況Oracle索引
- Oracle 12.2中的索引統計被呼叫情況Oracle索引
- 伺服器狀態出錯情況有哪些?伺服器
- 什麼情況下需要搭建大資料平臺大資料
- oracle 為什麼沒有使用索引的一種情況Oracle索引
- 基於COST優化,oracle什麼情況不走索引優化Oracle索引
- 不重啟mysql情況修改引數變數MySql變數
- MySQL必須flush privileges的兩種情況MySql
- MySQL 中使用 EXPLAIN判斷索引使用情況MySqlAI索引
- 【知識分享】伺服器過載有哪些情況伺服器
- SQL SERVER中什麼情況會導致索引查詢變成索引掃描SQLServer索引
- 在不影響程式使用的情況下新增shellcode
- 香港伺服器什麼情況下需要更新升級?伺服器
- 你的企業在什麼情況下需要人工智慧?快來看看你需要具備哪些條件與能力吧人工智慧
- 哪些情況應該廢標,廢標後如何處理
- MySQL中slave監控的延遲情況分析MySql
- mysql 新增時,唯一索引衝突時更新MySql索引
- 爬蟲在什麼情況下才需要使用代理IP爬蟲