以下部分為索引相關知識,記錄以備忘。
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中在...