亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

Mysql數據庫性能優化二

2024-07-24 13:09:02
字體:
來源:轉載
供稿:網友

在上篇文章給大家介紹了mysql數據庫性能優化一,今天繼續接著上篇文章給大家介紹數據庫性能優化相關知識。具體內容如下所示:

建立適當的索引 

說起提高數據庫性能,索引是最物美價廉的東西了。不用加內存,不用改程序,不用調sql,只要執行個正確的'create index',查詢速度就可能提高百倍千倍,這可真有誘惑力??墒翘煜聸]有免費的午餐,查詢速度的提高是以插入、更新、刪除的速度為代價的,這些寫操作,增加了大量的I/O。

是不是建立一個索引就能解決所有的問題?ename上沒有建立索引會怎樣?

select * from emp where ename='研發部'; 

---測試案例命令如下 (最好以 select * from emp e,dept d where e.empno=123451 )

*添加主鍵

ALTER TABLE emp ADD PRIMARY KEY(empno); 

*刪除主鍵

alter table emp drop primary key; 

索引的原理說明 

沒有索引為什么會慢?

使用索引為什么會快?

索引的代價

1、磁盤占用

2、對dml(update delete insert)語句的效率影響

btree 方式檢索,算法復雜度: log2N 次數

 Mysql,數據庫,性能優化

哪些列上適合添加索引 

1、較頻繁的作為查詢條件字段應該創建索引

select * from emp where empno = 1; 

2、唯一性太差的字段不適合單獨創建索引,即使頻繁作為查詢條件

select * from emp where sex = '男' 

3、更新非常頻繁的字段不適合創建索引

select * from emp where logincount = 1 

4、不會出現在WHERE子句中的字段不該創建索引

索引的類型 

•主鍵索引,主鍵自動的為主索引 (類型Primary)

•唯一索引 (UNIQUE)

•普通索引 (INDEX)

•全文索引 (FULLTEXT) [適用于MyISAM] ——》sphinx + 中文分詞 coreseek [sphinx 的中文版 ]

•綜合使用=>復合索引

簡述mysql四種索引的區別

lPRIMARY 索引 =》在主鍵上自動創建

lUNIQUE 索引=> 只要是UNiQUE 就是Unique索引.(只能在字段內容不重復的情況下,才能創建唯一索引)

lINDEX 索引=>就是普通索引

lFULLTEXT => 只在MYISAM 存儲引擎支持, 目的是全文索引,在內容系統中用的多, 在全英文網站用多(英文詞獨立). 中文數據不常用,意義不大,國內全文索引通常使用 sphinx來完成,全文索引只能在 char varchar text字段創建.

全文索引案例

1.創建表

create table news(id int , title varchar(32),con varchar(1024)) engine=MyISAM; 

2.建立全文索引

create fulltext index ful_inx on news (con); 

3.插入數據

這里要注意,對于常見的英文 fulltext 不會匹配,而且插入的語句本身是正確的.

'but it often happens that they are not above supporting themselves by dishonest means.which should be more disreputable.Cultivate poverty like a garden herb'

4.看看匹配度

mysql> select match(con) against('poverty') from news;+-------------------------------+| match(con) against('poverty') |+-------------------------------+| 0 || 0 || 0 || 0.9853024482727051 |+------------------------------+ 

0表示沒有匹配到,或者你的詞是停止詞,是不會建立索引的.

使用全文索引,不能使用like語句,這樣就不會使用到全文索引了.

復合索引

create index 索引名 on 表名(列1,列2); 

索引的使用

建立索引

create [UNIQUE|FULLTEXT] index index_name on tbl_name (col_name [(length)] [ASC | DESC] , …..);alter table table_name ADD INDEX [index_name] (index_col_name,...) 添加主鍵(索引) ALTER TABLE 表名 ADD PRIMARY KEY(列名,..); 聯合主鍵

刪除索引

DROP INDEX index_name ON tbl_name;alter table table_name drop index index_name; 刪除主鍵(索引)比較特別: alter table t_b drop primary key;

查詢索引(均可)

show index(es) from table_name;show keys from table_name;desc table_Name; 

修改索引,我們一般是先刪除在重新創建.

查詢要使用索引最重要的條件是查詢條件中需要使用索引。

下列幾種情況下有可能使用到索引:

1,對于創建的多列索引,只要查詢條件使用了最左邊的列,索引一般就會被使用。

2,對于使用like的查詢,查詢如果是 '%aaa' 不會使用到索引, 'aaa%' 會使用到索引。

下列的表將不使用索引:

1,如果條件中有or,即使其中有條件帶索引也不會使用。

2,對于多列索引,不是使用的第一部分,則不會使用索引。

3,like查詢是以%開頭

4,如果列類型是字符串,那一定要在條件中將數據使用引號引用起來。否則不使用索引。(添加時,字符串必須'')

5,如果mysql估計使用全表掃描要比使用索引快,則不使用索引。

測試案例(就在前面的dept表上做演示.)

CREATE TABLE dept(deptno MEDIUMINT UNSIGNED NOT NULL DEFAULT 0,dname VARCHAR(20) NOT NULL DEFAULT "",loc VARCHAR(13) NOT NULL DEFAULT "") ENGINE=MyISAM DEFAULT CHARSET=utf8 ; --放入數據,前面應該已經添加了,如果沒有則需要重新添加--測試開始.

添加一個主鍵索引

alter table dept add primary key (deptno) 

--測試語句

explain select * from dept where deptno=1; 

結果是:

mysql> explain select * from dept where deptno=1;*************************** 1. row ***************************id: 1select_type: SIMPLEtable: depttype: constpossible_keys: PRIMARYkey: PRIMARYkey_len: 3ref: constrows: 1Extra:1 row in set (0.00 sec) 

--創建多列索引

alter table dept add index myind (dname,loc); 

--證明對于創建的多列索引,只要查詢條件使用了最左邊的列,索引一般就會被使用

explain select * from dept where dname='研發部'; 會顯示使用到了索引myindexplain select * from dept where loc='MsBDpMRX'; 不會顯示使用到了索引myind

--對于使用like的查詢

explain select * from dept where dname like '%研發部'; 不會顯示使用到了索引myindexplain select * from dept where dname like '研發部%'; 會顯示使用到了索引myind

--如果條件中有or,即使其中有條件帶索引也不會使用

--為了演示,我們把復合索引刪除,然后只在dname上加入索引.

alter table dept drop index myindalter table dept add index myind (dname)explain select * from dept where dname='研發部' or loc='aa';-- 就不會使用到dname列上的 

--如果列類型是字符串,那一定要在條件中將數據使用引號引用起來。否則不使用索引

select * from dept from dname=1234; //不會使用到索引select * from dept from dname='1234'; //會使用到索引

查看索引的使用情況

show status like 'Handler_read%';

大家可以注意:

handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數。

handler_read_rnd_next:這個值越高,說明查詢低效。

* 這時我們會看到handler_read_rnd_next值很高,為什么,這是因為我們前面沒有加索引的時候,做過多次查詢的原因.

常用SQL優化

大批量插入數據(MySql管理員) 了解

對于MyISAM:

alter table table_name disable keys;loading data//insert語句;alter table table_name enable keys; 

對于Innodb:

1,將要導入的數據按照主鍵排序

2,set unique_checks=0,關閉唯一性校驗。

3,set autocommit=0,關閉自動提交。

優化group by 語句

默認情況,MySQL對所有的group by col1,col2進行排序。這與在查詢中指定order by col1, col2類似。如果查詢中包括group by但用戶想要避免排序結果的消耗,則可以使用order by 

null禁止排序

有些情況下,可以使用連接來替代子查詢。

因為使用join,MySQL不需要在內存中創建臨時表。(講解)

如果想要在含有or的查詢語句中利用索引,則or之間的每個條件列都必須用到索引,如果沒有索引,則應該考慮增加索引(與環境相關 講解)

select * from 表名 where 條件1='' or 條件2='tt'explaine select * from dept group by dname; =>這時顯示 extra: using filesort 說明會進行排序explaine select * from dept group by dname order by null =>這時不含有顯示 extra: using filesort 說明不會進行排序

***有些情況下,可以使用連接來替代子查詢。因為使用join,MySQL不需要在內存中創建臨時表

explain select * from emp , dept where emp.deptno=dept.deptno;

和下面比較就可以說明問題!!

explain select * from emp left join dept on emp.deptno=dept.deptno;

選擇合適的存儲引擎

MyISAM:默認的MySQL存儲引擎。如果應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務的完整性要求不是很高。其優勢是訪問的速度快。

InnoDB:提供了具有提交、回滾和崩潰恢復能力的事務安全。但是對比MyISAM,寫的處理效率差一些并且會占用更多的磁盤空間。

Memory:數據存在內存中,服務重啟時,數據丟失

MyISAM: 在插入數據時,默認放在最后. ,刪除數據后,空間不回收.(不支持事務和外鍵)

InnoDB 支持事務和外鍵

對應我們程序員說,常用的存儲引擎主要是 myisam / innodb / memory,heap 表

如果選用小原則:

1.如果追求速度,不在乎數據是否一直把保存,也不考慮事務,請選擇 memory 比如存放用戶在線狀態.

2.如果表的數據要持久保存,應用是以讀操作和插入操作為主,只有很少的更新和刪除操作,并且對事務的完整性要求不是很高。選用MyISAM

3.如果需要數據持久保存,并提供了具有提交、回滾和崩潰恢復能力的事務安全,請選用Innodb

選擇合適的數據類型

在精度要求高的應用中,建議使用定點數來存儲數值,以保證結果的準確性。deciaml 不要用float

對于存儲引擎是MyISAM的數據庫,如果經常做刪除和修改記錄的操作,要定時執行optimize table table_name;功能對表進行碎片整理。

日期類型要根據實際需要選擇能夠滿足應用的最小存儲的早期類型

create table bbs(id int ,con varchar(1024) , pub_time int);date('Ymd',時間-3*24*60*60); 2038年-1-19

對于使用浮點數和定點數的案例說明

create table temp1( t1 float(10,2), t2 decimal(10,2));insert into temp1 values(1000000.32,1000000,32); 發現 t1 成了 1000000.31 所以有問題.

對于optimize table 表名 演示

create table temp2( id int) engine=MyISAM;insert into temp2 values(1); insert into temp2 values(2); insert into temp2 values(3);insert into temp2 select * from temp2;--復制delete from temp2 where id=1; 發現 該表對于的數據文件沒有變小

定期執行 optimize table temp2 發現表大小變化,碎片整理完畢

&&對于InnoDB它的數據會存在data/ibdata1目錄下,在data/數據庫/只有一個 *.frm表結構文件.

關于mysql數據庫性能優化二小編就給大家介紹到這里,希望對大家有所幫助!


注:相關教程知識閱讀請移步到MYSQL教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品激情视频| 欧美大荫蒂xxx| 成人黄色短视频在线观看| 国产精品久久9| xxx一区二区| 欧美老少做受xxxx高潮| 91av视频导航| 秋霞成人午夜鲁丝一区二区三区| 亚洲国内精品视频| 久久91超碰青草是什么| 91在线国产电影| 亚洲成人激情在线| 中文字幕亚洲一区二区三区| 精品国产一区二区三区久久| 国产精品第10页| 欧美丝袜美女中出在线| 亚洲精品720p| 国产精品女视频| 韩国v欧美v日本v亚洲| 亚洲欧美日韩国产成人| 不卡伊人av在线播放| 在线视频精品一| 最新国产精品亚洲| 国产网站欧美日韩免费精品在线观看| 欧美日韩中文字幕日韩欧美| 国产成人av网址| 久久精品美女视频网站| 亚洲精品成人久久久| 久久艹在线视频| 久久天天躁狠狠躁夜夜av| 日韩在线观看成人| 久久久精品国产一区二区| 热re99久久精品国产66热| 久久精品2019中文字幕| 久久久久亚洲精品国产| 国产成人免费av电影| 色妞色视频一区二区三区四区| 亚洲欧美国内爽妇网| 成人a在线视频| 亚洲欧美色婷婷| 亚洲欧洲在线免费| 亚洲国产日韩欧美在线动漫| 亚洲国产精品一区二区久| 亚洲美女中文字幕| 国内精品久久久久久| www日韩中文字幕在线看| 欧美肥臀大乳一区二区免费视频| 日韩精品免费一线在线观看| 欧美亚洲第一页| 久久久久久亚洲精品| 欧美电影第一页| 国产不卡视频在线| 亚洲日本中文字幕| 欧美理论电影在线播放| 欧美韩日一区二区| 久久久久国产精品一区| 亚洲精品中文字幕av| 成人国产精品日本在线| 97色在线观看免费视频| 91精品在线国产| 久久久久久这里只有精品| 久久久这里只有精品视频| 91精品视频在线免费观看| 亚洲午夜精品久久久久久久久久久久| 国产精品久久久久国产a级| 欧美日韩国产一中文字不卡| 91视频-88av| 欧美成人h版在线观看| 青草青草久热精品视频在线网站| 欧美国产精品日韩| 欧美一级淫片aaaaaaa视频| 亚洲a成v人在线观看| 国产精品xxxxx| xvideos国产精品| 国产精品高潮视频| 国产91在线高潮白浆在线观看| 日韩av大片在线| 国产69精品久久久久99| 成人精品视频99在线观看免费| 成人黄色午夜影院| 亚洲精品在线91| 国产精品高潮呻吟久久av黑人| 91在线观看免费| 欧美高清视频在线播放| 亚洲免费成人av电影| 国产午夜精品理论片a级探花| 亚洲视频网站在线观看| 欧美又大粗又爽又黄大片视频| 亚洲欧美一区二区三区在线| 久久97精品久久久久久久不卡| 久久精品影视伊人网| 亚洲一区二区三区sesese| 在线播放日韩欧美| 国产精品久久久久免费a∨大胸| 91精品国产乱码久久久久久蜜臀| 亚洲久久久久久久久久| 少妇av一区二区三区| 亚洲欧美国产精品专区久久| 欧美日韩综合视频网址| 亚洲欧洲在线视频| 俺去亚洲欧洲欧美日韩| 国产丝袜视频一区| 亚洲日本aⅴ片在线观看香蕉| 欧美日韩ab片| 亚洲xxx大片| 中文字幕精品久久| 中文字幕综合一区| 日韩av电影中文字幕| 日韩动漫免费观看电视剧高清| 国产欧美精品日韩精品| 91精品视频网站| 久久久久久国产精品三级玉女聊斋| 欧美性猛交xxxxx水多| 51午夜精品视频| 美女久久久久久久久久久| 日本一区二区不卡| 亚洲精选中文字幕| 欧美激情精品久久久久久久变态| 国产日韩中文字幕| 亚洲欧美国产精品| 青青草99啪国产免费| 国产综合在线观看视频| 国产精品极品美女粉嫩高清在线| 成人国产精品免费视频| 精品人伦一区二区三区蜜桃免费| 国产精品久久激情| 91精品国产91久久久久福利| 日本免费久久高清视频| 欧美成人国产va精品日本一级| 亚洲国产成人久久综合一区| …久久精品99久久香蕉国产| 亚洲精品天天看| 日韩中文字幕在线观看| 韩剧1988免费观看全集| 国产有码一区二区| 成人a在线视频| 亚州欧美日韩中文视频| 亚洲第一精品久久忘忧草社区| 午夜精品久久久久久久久久久久久| 亚洲国产精品一区二区三区| 国产精品激情av电影在线观看| 91福利视频在线观看| 亚洲综合小说区| 久久精品电影网站| 亚洲福利视频网| 亚洲另类欧美自拍| 亚洲男人的天堂网站| 5278欧美一区二区三区| 国产精品露脸av在线| 91在线视频成人| 亚洲一区二区三区久久| 大桥未久av一区二区三区| 国产在线观看精品一区二区三区| 日韩在线免费视频观看| 激情懂色av一区av二区av| 国产欧美精品一区二区| 国内伊人久久久久久网站视频| 91精品国产91久久久久久不卡| 亚洲淫片在线视频| 国产成人avxxxxx在线看| 69久久夜色精品国产7777| 福利微拍一区二区| 色婷婷亚洲mv天堂mv在影片| 国产精品久久久久999|