MYSQL索引及其相關效能測試

2021-08-07 01:43:37 字數 2777 閱讀 8386

以下部分為索引相關知識,記錄以備忘。

1. 不應該建立索引的字段:

對於那些在查詢中很少使用或者參考的列不應該建立索引。

索引不會包含有null值的列。

對於那些只有很少資料值的列也不應該增加索引。

對於那些定義為text, image和bit資料型別的列不應該增加索引。 

當修改效能遠遠大於檢索效能時,不應該建立索引。

2.索引分為:

主鍵索引(primary key):特殊的唯一索引,不允許有空值。一般是在建表的時候同時建立主鍵索引

唯一索引(unique):索引列的值必須唯一,但允許有空值。

普通索引:沒有任何限制。

建立索引語句:

create index cannot be used to create a primary key; use alter table instead.!!!!!!! 

create unique index indexname on tablename (col1);

create index table_name_col1 on table_name (col1);

alter table `table_name` add primary key (`column`);

alter table `table_name` add unique (`column`);

alter table `table_name` add index index_name (`column`)

檢視索引:show index from table_name;

刪除索引:drop index index_name on talbe_name

清除mysql表中資料:

delete from 表名;

truncate table表名;   truncate相當於保留mysql表的結構,重新建立了這個表,所有的狀態都相當於新錶。

3.效能測試驗證

效能分析方法:

1、慢查詢 (分析出現出問題的sql)

2、explain (顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句)

3、profile(查詢到 sql 會執行多少時間, 並看出 cpu/memory 使用量, 執行過程中 systemlock, table lock 花多少時間等等.)

方法一:show profiles 之類的語句

方法二:

這種方法有一點要注意,就是三條sql語句要盡量連一起執行,不然誤差太大,根本不准

set @d=now(); 

select * from comment; 

select timestampdiff(second,@d,now()); 

如果是用命令列來執行的話,有一點要注意,就是在select timestampdiff(second,@d,now());後面,一定要多copy乙個空行,不然最後乙個sql要你自己按回車執行,這樣就不准了。  

和儲存過程有關的許可權有三種: 

alter routine 編輯或刪除儲存過程 

create routine 建立儲存過程 

execute 執行儲存過程

在使用grant建立使用者的時候分配這三種許可權。 儲存過程在執行的時候預設是使用建立者的許可權執行的。  

用管理員dba使用者登入mysql:  ********************** 

顯示資料庫使用者許可權: show grants for user1';  

grant create routine on iconldb.* to user1;   建立儲存過程 

grant alter routine on iconldb.* to user1;    編輯或刪除儲存過程

grant execute on iconldb.* to user1;          執行儲存過程

grant index on iconldb.* to user1;     操作 mysql索引許可權

修改完許可權以後 一定要重新整理服務,或者重啟服務,重新整理服務用:flush privileges。

用普通使用者登入mysql:  mysql -h *** -p *** -u *** -p    密碼:***

show databases;

use ***;

select  version(); //資料庫版本

mysql>show profiles;分析sql效能。

empty set (0.00 sec)

顯示為空,說明profiles功能是關閉的。下面開啟

mysql> set profiling=1;

query ok, 0 rows affected (0.00 sec)

round(rand() * 89 + 10) 生成隨機整數:10~99

round(rand() * 100)     生成隨機整數:0~100

造測試資料(建立儲存過程):

delimiter //

create procedure myproc1()   

begin

declare num int;     

set num=1;   

while num <= 100000 do   

insert語句

set num=num+1;  

end while;

end;

// call myproc1();

分別在建立索引前和建立索引後,執行相關的sql語句。

mysql> show profiles;檢視sql語句執行消耗的時間。

zabbix對mysql相關效能監控

1.關閉防火牆,關閉selinux systemctl stop firewalld setenforce 02.時間同步 yum y install ntpdate ntpdate pool.ntp.org date3.上傳zabbix映象到yum.repos.d目錄下 4.安裝zabbix相關元...

hashCode相關效能優化

學習下hashmap中用到的關於hashcode效能優化技巧,作為筆記,為之後併發深入作基礎。1.關於提高效能的hash演算法 在被模的位數為2的n次方時,用位與代替效率低下的模運算。位與效率相比模運算效率更高。例 15 4 3,代替為 15 3 1111 0011 0011 3 hashmap中在...

hashCode相關效能優化

學習下hashmap中用到的關於hashcode效能優化技巧,作為筆記,為之後併發深入作基礎。1.關於提高效能的hash演算法 在被模的位數為2的n次方時,用位與代替效率低下的模運算。位與效率相比模運算效率更高。例 15 4 3,代替為 15 3 1111 0011 0011 3 hashmap中在...