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