判断 服务器架构性能 数据,服务器架构之性能扩展-第五章(6)
Mysql>create table t2 like t1;//復制表結構
Mysql>insert into t2 select * from t1; //復制數(shù)據(jù)內容
索引是一種快速查詢的有效方法,可以通過alter增加索引或create語句創(chuàng)建。
mysql>alter table t1 add ind_id (id);
mysql>alter table t1 add unique/primary key (id);
mysql>create index ind_id on table t1 (id);
mysql>show index from t1;
mysql>drop index ind_id on table t1;
mysql>alter table t1 drop index ind_id;
Unique索引時指唯一索引,是沒有重復行的索引。
Alter方法創(chuàng)建和刪除索引
刪除主鍵,如果索引列是自動增長的變量。首先要取消自動增長,然后才可以刪除主鍵,因為自動增長序列默認為主鍵。
增加自動增長主鍵索引
視圖:是存在于表之外的另一張表,符合條件的查詢結果
Mysql>create view v_t1 as select * from t1 where id >10;
Mysql>drop view v_t1;
視圖時隨著主表而變化的表
字符串函數(shù):
Concat (string1,……) //連接字符串
Lcase(string1)?//換成小寫
Ucase(string1)//換成大寫
Length(string1) //string1的長度
Rtrim(string1)?//去除后端空格
Ltrim(string1)//取出前段空格
Repeat (string1,count)//重復count次
Replace(str,search_str,replace_str) //在str中,用replace_str代替search_str
Substring(str,position,length) //從str的position開始,取length個字符
Space(count) //生成count個空格
數(shù)學函數(shù):
Bin(number)//十進制轉為二進制
Ceiling(string1)//向上取整
Floor(string)//向下取整
Max(col)//取最大值,聚合時使用
Min(col)//取最小值,聚合時使用
Sqrt(number)//開平方
Rand()//返回0-1內的隨即取值
日期函數(shù):
Curdate() //返回當前日志
Curtime() //返回當前時間
Now()?//返回當前日期時間
Week(date) //返回這是多少周
Year(date)?//返回年份
Datediff(date1,date2) //返回開始時間date1和結束時間date2間天數(shù)
預處理是傳遞一個參數(shù)作為where判斷語句:
Mysql>prepare hello from “select * from t1 where id >?”;
Mysql>set @i=1;
Mysql>excute hello using @i;
Mysql>drop prepare stml;
mysql>set autocommit=0;//關閉自動提交
mysql>delete from t1 where id=11; //
mysql>savepoint p1;//建立一個還原點
mysql>delete from t1 where id=10;
mysql>savepoint2;
mysql>rollback to p1;?//恢復到p1還原點,p2自動失效
mysql>rollback;?//退回到原始還原點
修改引擎,使用事處理功能,要使用innodb引擎才可以。
回滾恢復數(shù)據(jù)
設置回滾點
存儲是一種批量插入數(shù)據(jù)的方法,需要先將結尾符改為//,最后再改回來,然后通過call命令來調用存儲
觸發(fā)器是一種當完成某項動作的同時,可以同時調用其它數(shù)據(jù)庫進程同時進行。通過create trigger創(chuàng)建。
提前存在的值則old,不存在則new。
Insert型觸發(fā)器:
Delete型觸發(fā)器
Update型觸發(fā)器:
聯(lián)合查看:可以使用聯(lián)合查看來查詢觸發(fā)與否
5.1.9重排auto_increment值
常用的刪除數(shù)據(jù)表內容有如下兩種方法:
Mysql>delete from t1;?//清除表的內容,改變結構
Mysql>truncate table t1; //清楚表的內容,不改變結構,速度快常用
Mysql>alter table t1 auto_increment=1;?//如果自動增長值不是從1開始可以這樣調整
5.1.10常見sql技巧
正則表達式:
Mysql>select name,email from t where email pegexp “@163[,.]com$”; //匹配@163.com或@163,com郵箱
Mysql>select name,email from t where emal like “@163.com” or email kike “@163,com”;
Rand()隨機:
Mysql>select * from t order by rand() limit 3; //隨機3條數(shù)據(jù)
Group by的排序擴展
Mysql>select cname,pname,count(pname)?from t group by cname,pame with rollup;//分別對個結果進行排序和統(tǒng)計
創(chuàng)建外鍵:
Mysql>create table t3(id int,name char(20), foreign kye (id) references t2(id) on delete cascade on update cascade);?//創(chuàng)建t3使用外鍵t2
Mysql help使用:
Mysql>? Create 查看命令和用法
5.2.1優(yōu)化sql語句一般步驟
首先查看各種語句使用頻率
Mysql>show 【session/global】 status;?//session當前連接,global表示數(shù)據(jù)啟動至今
登陸以來進行增刪改查的次數(shù)
Com_update,com_delete分別表示更新和刪除次數(shù)。
對于innodb引擎可以使用以下查詢語句,innodb_rows_delete/update/select/insert
Innodb引擎是影響的行數(shù),myisam引擎是影響的次數(shù)。
Innodb是影響的行數(shù),myisam是影響的次數(shù)。
Connections代表連接數(shù),uptime代表連接時間,slow_queries代表慢查詢次數(shù)。
定位執(zhí)行效率低的語句
Mysql>explain select * from t where id=1000;
Mysql>desc select * from t where id=1000;
我們重點看一下影響行數(shù)。
對一個表增加索引之后,查詢范圍由9變2,快多了。
索引是優(yōu)化mysql數(shù)據(jù)庫最常用的方法,使用索引注意以下幾點。
1,,對于復合索引,一般只對左邊的索引有效。
2,使用通配符時,like左邊不能用通配符
例:mysql>explain select * from t where name like “%3”\G?//不會使用索引
3.對于null的搜索is null
例:mysql>desc select * from t where name is null \G
1.對于行數(shù)低于100的數(shù)據(jù)表,索引效果不是很好
2.聯(lián)合查詢語句語句要都使用索引,才會使用索引
3.如果索引列是字符串,則查詢時要加“”
4.對于handler_read_rnd_next參數(shù)較大的,應該建立索引
5.3常用sql優(yōu)化
5.3.1提高數(shù)據(jù)的導入效率
常用導入數(shù)據(jù)的方法是通過outfile進行的。通過outfile導出數(shù)據(jù),這時是表內容,非表結構。例如導出數(shù)據(jù)
導入數(shù)據(jù)
對于innodb引擎表可以通過以下方法提高速度:
1、通過set unique_checks=0,關閉唯一性效驗,導入數(shù)據(jù)完畢后再set unique_checks=1;恢復唯一性效驗。
2、關閉自動提交,提高導入效率。導入數(shù)據(jù)前執(zhí)行set autocommit=0關閉自動提交;導入后set autocommit=1,恢復自動提交。
5.3.2優(yōu)化insert語句
使用insert delayed可以使數(shù)據(jù)庫得到更高的效率。并且可以增加bulk_inser_buffer_size的變量值來提高速度
5.3.3避免使用嵌套查詢
5.4數(shù)據(jù)庫的優(yōu)化
數(shù)據(jù)庫的優(yōu)化一般可以通過拆分表提高表的訪問效率,這也可以解決大存儲量;使用中間表技術提高查詢速度,中間表一般就是視圖技術。
數(shù)據(jù)庫鎖定可以使用lock table t read/write;
讀鎖,有一個人讀鎖,其他人可讀不可以寫。
寫鎖,只有本人可以進行增刪改查,其他人不能讀寫。
5.4.2四種字符集問題
Mysql>status;查看系統(tǒng)字符集。它包括服務器字符集,數(shù)據(jù)庫字符集,客戶端字符集,鏈接字符集
字符集可以通過/etc/my.cnf配置文件進行修改
【client】用于定義客戶端字符集和鏈接字符集
【mysqld】控制著服務器字符集和數(shù)據(jù)庫字符集
下面的collation-server是校驗字符集
Mysql>show character set;?//查看校驗字符集
Bin_log日志是系統(tǒng)進行恢復的重要日志
通過修改/etc/my.cnf文件,去掉#號即可
5.4.4慢查詢日志
慢查詢日志是進行數(shù)據(jù)庫優(yōu)化的基礎。
Vi /etc/my.cnf
Log_slow_queries=slow.log//開啟慢查詢
Log_query_time=5//設置慢查詢的時間
Socket默認是位于/tmp/mysql.sock, mysql的啟動需要socket文件,當然可以通過重啟數(shù)據(jù)庫自動建立socket,也可以不用socket便實現(xiàn)登陸。可以使用
Mysql>mysql –u root –p –protocol tcp –hlocalhost
Service mysqld?stop
Mysql_safe –skip-grant-tables –user=mysql &//跳過授權表
Mysql –uroot
Mysql>update user set password=password(“123”) where user=”root” and host=”localhost”;
或mysql>set password for root@loaclhost=password(“123”);
或mysql>set password=password(“123”);//修改密碼
總結
以上是生活随笔為你收集整理的判断 服务器架构性能 数据,服务器架构之性能扩展-第五章(6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Word 中 top10 最强快捷键:快
- 下一篇: 文件共享服务器第二部,第二章-构建Sam