日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql谓词演算_MySQL基础知识

發(fā)布時間:2024/9/27 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql谓词演算_MySQL基础知识 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、了解MySQL

1、什么是數(shù)據(jù)庫?

數(shù)據(jù)庫是一種以某種有組織的方式存儲的數(shù)據(jù)集合。

2、模式(schema):關(guān)于數(shù)據(jù)庫和表的布局及特性的信息。

3、列:正確的將數(shù)據(jù)分解為多個列極為重要。通過把它分解開,才有可能利用特定的列對數(shù)據(jù)進(jìn)行排序和過濾。

4、主鍵(primary key):一列,其值能夠唯一區(qū)分表中每個行,用來表示一個特定的行。應(yīng)該保證創(chuàng)建的每個表具有一個主鍵,以便于以后的數(shù)據(jù)操縱和管理。

5、外鍵:

6、SQL語句不區(qū)分大小寫,但是開發(fā)人員通常對所有SQL關(guān)鍵字大寫,而對所有列和表名使用小寫,這樣做使代碼更易于閱讀和調(diào)試。

二、使用MySQL

1、連接 ? ?mysql -h localhost -u root -p xxxx

2、show命令:

show databases;

use databases;

show tables;

show columns from tablename; ==== describe tablename;

show status; 用于顯示廣泛的服務(wù)器狀態(tài)信息

show create database databasename;

show create table tablename; ? ? 分別用來顯示創(chuàng)建特定數(shù)據(jù)庫或表的MySQL語句。

show grants; 用來顯示授予用戶(所有用戶或特定用戶)的安全權(quán)限

show errors; ?show warnings; 用來顯示服務(wù)器錯誤或警告消息

help show;?顯示允許的show語句

MySQL 5支持一個新的Information_schema命令,可用它來獲得和過濾模式信息。

三、檢索數(shù)據(jù)

1、select語句:為了檢索數(shù)據(jù),必須至少給出兩條信息--想選擇什么,從什么地方選。

select column from tablename; ? 檢索單個列,如果未排序,返回的順序可能是數(shù)據(jù)的添加順序也可能不是。

select column1,column2 from tablename;?檢索多個列

select *?from tablename; 檢索所有列?,除非你確實需要表中的每個列,否則最好別用*通配符。雖然使用通配符可能會使你自己省事,但檢索不需要的列通常會降低檢索和應(yīng)用程序的性能

select?distinct?column from tablename; 只返回不同值,即剔除重復(fù)的數(shù)據(jù)。distinct? 應(yīng)用于所有列,不僅是前置它的列

select column form tablename limit 5;限制語句,不多于5行。

select column form tablename limit 5,5;限制語句,從第6行開始的5行? ? ?,第一行的行號為0,

有一些情形需要完全限定名,tablename.columnname

2、order by子句排序檢索數(shù)據(jù):

關(guān)系數(shù)據(jù)庫設(shè)計理論認(rèn)為,如果不明確規(guī)定排序順序,則不應(yīng)該嘉定檢索出的數(shù)據(jù)的順序有意義。

select column from tablename order by column;用選擇的列或非選擇的列排序都是合法的。默認(rèn)升序排列,desc關(guān)鍵字降序,如果多個列排序,desc只應(yīng)用到直接位于其前面的列名。

select column from tablename order by column1,column2;按多個列排序,先按第一個排序,如果重復(fù)則繼續(xù)按第二個排序。所以,列的順序選擇很重要。

在字典排序中,A被視為與a相同。這是MySQL的默認(rèn)行為,如果有必要,可以用collation校對字符集改變這種行為。

select * from XXX order by limit 1;可以找到最大值。使用子句的次序不對會產(chǎn)生錯誤消息。

3、where子句過濾檢索數(shù)據(jù):

只檢索所需要的數(shù)據(jù),通常需要指定搜索條件(search crierria),即過濾條件

select column from table where name ='zhangsan' order by ..;過濾條件默認(rèn)不區(qū)分大小寫。

where子句包含多種條件操作符:

=, ?<>, ?!=, ? , ? >=, ? between 5 and 10,(包括開始和結(jié)束)

select column from table where column is null;空值檢查

4、組合where子句建立功能更強(qiáng),更高級的搜索條件:

AND操作符:

select A from table where B=2 and C<>5; ?條件交集

OR操作符:

select A from table where B=2 or C<>5; ?條件并集

where可以包含任意數(shù)目的AND和OR操作,允許兩者結(jié)合以進(jìn)行復(fù)雜和高級的過濾。但是AND的優(yōu)先級比OR的優(yōu)先級高,所以需要使用圓括號來保證計算次序。不要依賴默認(rèn)的計算次序。

IN操作符:

select A from table where B in (2,4,6) order by ..;

IN操作符用來指定清單時與OR功能相同,但I(xiàn)N還有很多優(yōu)點:

IN操作符的語法更清楚且更直觀;IN操作符計算次序更容易管理;

IN操作符一般比OR清單執(zhí)行更快;

IN操作符最大的優(yōu)點是可以包含其他select語句,使得能夠更對臺地建立where子句。

NOT操作符: not操作符有且只有一個功能,就是否定他之后所跟的任何條件。

Select A from table where B not in (2,4);

MySQL 支持使用 NOT 對 IN 、Between 和 exists 子句取反

5、使用通配符(wildcard)過濾:

搜索模式(search pattern): 由字面值、通配符或兩者組合構(gòu)成的搜索條件。

LIKE操作符(謂詞):前面介紹的所有操作都是針對已知值進(jìn)行過濾的。但是這種過濾方式并不是任何時候都好用。利用通配符可以創(chuàng)建比較特定的數(shù)據(jù)搜索模式。

百分號(%)通配符:? ?%表示任何字符出現(xiàn)任意次數(shù)

select * from table where name like 'zhang%';

select * from table where name like '%ang%';

通過 % 可以組合多種搜索模式;但是 % 不能匹配 NULL值

下劃線(_)統(tǒng)配符: ?_ 只匹配單個字符,不能多也不能少

select * from table where name like '_hang';

使用通配符的技巧:

MySQL通配符很有用,但是這種功能是花費代價的,通配符搜索的處理一般要比前面討論的其他搜索花費時間更長。所以需要一些技巧

不要過度使用通配符。如果其他操作符能達(dá)到相同的目的,應(yīng)該使用其他操作符。

在確實需要使用通配符是,除非絕對有必要,否則不要把他們用在搜索模式的開始處。把通配符置于搜索模式的開始處,搜索起來是最慢的。

仔細(xì)注意通配符的位置,如果放錯地方,可能不會反悔想要的數(shù)據(jù)。

6、用正則表達(dá)式進(jìn)行搜索: ?用于匹配特定模式的文本,如電話號碼,郵箱等。

REGEXP操作符: regexp 替換立刻的作用

關(guān)于正則表達(dá)式的內(nèi)容請參考正則表達(dá)式語法。

7、創(chuàng)建計算字段:

計算字段是運行時在select語句內(nèi)創(chuàng)建的。

使用Concat()函數(shù)實現(xiàn)拼接。

select Contact(A, '(',B,')') from table ;

使用別名,別名有時也稱為導(dǎo)出列

select Contact(A, '(',B,')') as A(B) from table ;

執(zhí)行算術(shù)計算

select A, B*C as BC from table;

8、使用數(shù)據(jù)處理函數(shù):

文本處理函數(shù):

Left()、Right()返回串左(右)邊的字符

Length() 返回串的長度

Locate()找出串的一個子串

Lower()、Upper()轉(zhuǎn)換大小寫

LTrim()、RTrim()去掉左(右)邊的空格

Soundex() 返回串的SOUNDEX值,將任何文本串轉(zhuǎn)換為描述其語音表示的字母數(shù)字模式的算法。即匹配所有發(fā)音類似的值。

SubString()返回子串的字符

日期和時間處理函數(shù):

AddDate() ?增加一個日期(天、周等)

AddTime() ?增加一個時間(時、分等)

Now()、CurDate()、CurTime() 返回當(dāng)前的日期和時間、日期部分、時間部分

Date()、Time()、Year()、Month()、Day()、Hour()、Minute()、Second()、返回日期時間的日期部分、時間部分、年、月、日、小時、分鐘、秒

DateDiff() 計算兩個日期之差

Date_ADD() 高度靈活的日期運算函數(shù)

Date_Format() 返回一個格式化的日期或時間串

DayOfWeek() 對于一個日期,返回對應(yīng)的星期幾

數(shù)值處理函數(shù):

Abs(), ?Cos(), ?Exp(), ?Mod(), ?Pi(), ? Rand(), ? Sin(), ?Sqrt(), ?Tan()

9、匯總數(shù)據(jù):

聚集函數(shù):運行在行組上,計算和返回單個值的函數(shù)

AVG(), COUNT(), ?MAX(), ?MIN(), ?SUM()

10、分組數(shù)據(jù):

where ? group by ?having?? order by;

select from where group by having order by limit;

group by 通常與匯總函數(shù)連用。

11、使用子查詢:

select * from table where A?in?(select * from table where xxxx);

對于嵌套的子查詢的數(shù)目沒有限制,不過在實際使用時由于性能的限制,不能嵌套太多的子查詢。注意:列必須匹配。

12、聯(lián)結(jié)表:

外鍵(foreign key):外鍵為某個表中的一列,它包含另一個表的主鍵值,定義了兩個表之間的關(guān)系。

聯(lián)結(jié)查詢:規(guī)定要聯(lián)結(jié)的所有表以及他們?nèi)绾侮P(guān)聯(lián)。

select A from table1,table2 where table1.id = table2.id;

笛卡爾積:

內(nèi)聯(lián)結(jié):inner join

外聯(lián)結(jié):左外 left outer join;查詢左表中所有記錄的右表活動,如所有人的消費記錄,沒有就顯示空

右外 right outer jion;查詢右表所有記錄的關(guān)于左表的情況。

13、組合查詢:

UNION關(guān)鍵字:

14、全文本搜索:

MySQL中兩個最常使用的引擎:

MyISAM:支持全文本搜索

InnoDB:不支持全文本搜索

一般在創(chuàng)建表時啟用全文本搜索: fulltext(column);

在索引之后,使用兩個函數(shù)Match()和Against()執(zhí)行全文本搜索,Match()指定被搜索的列,Against指定要使用的搜索表達(dá)式。

select column from table where Match(column) Against('模式');

四、插入數(shù)據(jù)

1、插入完整的行:

insert into tablename values(對應(yīng)列的次序的值);

這種語法很簡單,但并不安全,應(yīng)該盡量避免使用。編寫依賴于特定列次序的SQL語句,如果列發(fā)生了變化,有時難免會出問題。

insert into tablename(列的名列表) values(對應(yīng)的值列表);

雖然麻煩,但即使標(biāo)的結(jié)構(gòu)改變,該語句仍能正確工作,

2、插入多個行:

insert inte tablename(列的名列表) values(對應(yīng)的值列表),(對應(yīng)的值列表);

3、插入檢索出的數(shù)據(jù):

insert into tableA(列列表) select 列列表 from tableB;

五、更新和刪除數(shù)據(jù)

1、update: 一定要注意確定要更新的條件,一不小心就更新了所有行。

更新表中特定行:

update table set column='value' where id = 1;

如果刪除某個列的值,可以set null;

更新表中所有行:

2、delete:一定要仔細(xì),因為稍不注意,就會錯誤的刪除表中的所有行

刪除表中特定的行:

delete from tablename where id = 1;

刪除表中所有的行:

delete from tablename;

truncate tablename; 這種完成相同的工作,但是效率更高,它是刪除原來的表在重新創(chuàng)建一個,而不是一行一行的刪除

六、創(chuàng)建表和操縱表

1、創(chuàng)建表:

create table user if not exists

(

id int not null auto_increment,

name varchar(10),

gender char(1) not null default '男',

primary key(id),

foreign key(id) references tableA(id)

)engine=InnoDB;

默認(rèn)使用 MyISAM引擎,支持全文本搜索

InnoDB引擎,支持事務(wù)處理。

引擎類型可以混用,但是外鍵不能跨引擎

存儲引擎:

MySQL可以將數(shù)據(jù)以不同的技術(shù)存儲在文件(內(nèi)存)中,這種技術(shù)就成為存儲引擎。

每一種存儲引擎使用不同的存儲機(jī)制、索引技巧、鎖定水平,最終提供廣泛且不同的功能。

2、更新表:

alter table,在理想狀態(tài)下,當(dāng)表中存儲數(shù)據(jù)后,該表就不應(yīng)該在被更新。在表的設(shè)計過程中需要花費大量時間來考慮,以便后期不對該表進(jìn)行大的改動。

alter table?add?column ; 增加列

alter table?drop?column; 刪除列

alter table?modify

alter table 的一種常見用途是定義外鍵:

alter table tableA add constraint 外鍵名 foreign key (列名) references tableB (列名);

alter table 要極為小心,應(yīng)該在進(jìn)行改動前做一個完整的備份(模式和數(shù)據(jù)的備份),數(shù)據(jù)庫表的更改不能撤銷,如果增加了不需要的列,肯呢過不能刪除他們,類似的,如果刪除了不應(yīng)該刪除的列,可能會丟失該列中的所有數(shù)據(jù)。

3、刪除表:

drop table tableA; 該語句沒有確認(rèn),也不能撤銷,執(zhí)行將永久刪除該表。

4、重命名表:

rename table tableA to tableB;

七、視圖

視圖是一個虛擬的表。與包含數(shù)據(jù)的表不一樣,試圖只包含使用動態(tài)檢索數(shù)據(jù)的查詢。即視圖中不包含表中應(yīng)該有的任何列或數(shù)據(jù),它包含的是一個SQL查詢。

視圖的作用:

重用SQL語句。

簡化復(fù)雜的SQL操作。在編寫查詢后,可以方便地重用它而不必知道它的基本查詢細(xì)節(jié)。

使用標(biāo)的組成部分而不是整個表。

保護(hù)數(shù)據(jù)。可以給用戶授予表的特定部分的訪問權(quán)限而不是整個表的訪問權(quán)限。

更改數(shù)據(jù)格式和表示。試圖可返回與底層表的表示格式不同的數(shù)據(jù)。

使用視圖:

創(chuàng)建視圖:create view 視圖名 as select 一個聯(lián)結(jié)查詢;

查看創(chuàng)建視圖的語句:show create view viewname;

刪除視圖:drop view viewname;

更新視圖:create or replace view;

八、使用存儲過程

存儲過程簡單來書,就是為以后的使用而保存的一條或多條MySQL語句的集合。可將其視為批文件。

存儲過程的優(yōu)點:簡單、安全、高性能

通過把處理封裝在容易使用的單元中,簡化復(fù)雜的操作。

由于不要求反復(fù)建立一系列處理步驟,這保證了數(shù)據(jù)的完整性。

簡化多變動的管理。如果表名、列名或業(yè)務(wù)邏輯有變化,只需要更改存儲過程的代碼,使用它的人員甚至不需要知道這些變化。

提高性能。

創(chuàng)建存儲過程:

執(zhí)行存儲過程:

九、游標(biāo)

MySQL游標(biāo)只能用于存儲過程。

創(chuàng)建游標(biāo):

打開和關(guān)閉游標(biāo):

十、使用觸發(fā)器

觸發(fā)器是MySQL在響應(yīng) insert、update、delete時自動執(zhí)行的一條語句。

創(chuàng)建觸發(fā)器:

刪除觸發(fā)器:

使用觸發(fā)器:

十一、事務(wù)處理

事務(wù)處理可以用來維護(hù)數(shù)據(jù)庫的完整性,它保證成批的MySQL操作要么完全執(zhí)行,要么完全不執(zhí)行。

相關(guān)術(shù)語:事務(wù)(transaction)、回滾(rollback)、提交(commit)、保留點(savepoint)

控制事務(wù)處理:

十二、全球化與本地化

1、字符集和校對順序:

數(shù)據(jù)庫表被用來存儲和檢索數(shù)據(jù)。不同的語言和字符集需要以不同的方式存儲和檢索。因此,MySQL需要使用不同的字符集,使用不同的排序和檢索數(shù)據(jù)的方法。

字符集:為字母和符號的集合

編碼:為某個字符集成員的內(nèi)部表示

校對:為規(guī)定字符如何比較的指令,對 order by 命令的排序結(jié)果有重要影響。

show character set; 這條語句顯示所有可用的字符集以及每個字符集的描述和默認(rèn)校對。

show collation; ?顯示所有可用的校對,以及他們使用的字符集。

確定數(shù)據(jù)庫所用的字符集和校對:

show variables like 'character%';

show variables like 'collation%';

MySQL有六處使用了字符集,分別為:client、connection、database、results、server、system。

client是客戶端使用的字符集。

connection是連接數(shù)據(jù)庫的字符集設(shè)置類型,如果程序沒有指明連接數(shù)據(jù)庫使用的字符集烈性就按照服務(wù)器端默認(rèn)的字符集設(shè)置。

database是數(shù)據(jù)庫服務(wù)器中某個使用的字符集設(shè)定,如果建庫是沒有指明,將使用服務(wù)器安裝時指定的字符集設(shè)置。

results是數(shù)據(jù)庫給客戶端返回時使用的字符集設(shè)定,如果沒有指明,使用服務(wù)器默認(rèn)的字符集。

server是服務(wù)器安裝時指定的默認(rèn)字符集設(shè)定。

system是數(shù)據(jù)庫系統(tǒng)使用的字符集設(shè)定。

實際上,字符集很少是服務(wù)器范圍的設(shè)置,不同的表,甚至不同的列都可能需要不同的字符集,而且兩者都可以在創(chuàng)建表時指定。

create table student(

id int,

name varchar(10) character set gbk collate

)default character set utf8

collate utf8_general_ci;

十三、安全管理

1、訪問控制:

用戶應(yīng)該對他們需要的數(shù)據(jù)有適當(dāng)?shù)脑L問權(quán),既不能多也不能少。換句話說,用戶不能對過多的數(shù)據(jù)具有過多的訪問權(quán)。

使用MySQL Administrator 提供了一個圖形界面來管理用戶及賬號權(quán)限。

防止無意識的錯誤,訪問控制的目的不僅僅是防止用戶的惡意企圖。數(shù)據(jù)夢魘更為常見的是無意識錯誤的結(jié)果,如打錯MySQL語句,在不合適的數(shù)據(jù)庫中操作或其他一些用戶錯誤。通過保證用戶不能執(zhí)行他們不應(yīng)該執(zhí)行的語句,訪問控制有助于避免這些情況的發(fā)生。

不要使用root,應(yīng)該嚴(yán)肅對待root登錄的使用。僅在絕對需要時使用它,不用改在日常的MySQL操作中使用root。

2、管理用戶:

MySQL用戶賬號和信息存儲在名為mysql的數(shù)據(jù)庫中。

use mysql;

select user from user;

創(chuàng)建用戶賬號:

create user 用戶名 identified by '密碼';

重命名用戶賬號:

rename user old to new;

刪除用戶賬戶:同時刪除了所有相關(guān)的賬號權(quán)限。

drop user 用戶名;

設(shè)置訪問權(quán)限:在創(chuàng)建用戶賬號后,必須接著分配訪問權(quán)限。不然看不到任何數(shù)據(jù)。

show grants for 用戶名@主機(jī)名;查看用戶權(quán)限

grant用法:要授予的權(quán)限,被授予訪問權(quán)限的數(shù)據(jù)庫或表,用戶名

grant select on 數(shù)據(jù)庫名.表名 to 用戶名;

revoke用法:grant的反操作,用法一樣,被撤銷的訪問權(quán)限必須存在。

revoke select on?數(shù)據(jù)庫名.表名 from 用戶名;

權(quán)限列表:all, alter, create, select, insert,............很多

控制層次: ?整個服務(wù)器, grant all;

整個數(shù)據(jù)庫, on 數(shù)據(jù)庫名.*;

特定的表, ? on 數(shù)據(jù)庫名.表名;

特定的列,

特定的存儲過程。

簡化多次授權(quán):逗號分隔

grant select,insert on database.* to username;

更改口令:使用Password加密

set passward for user = Password('密碼');

十四、數(shù)據(jù)庫維護(hù)

1、備份數(shù)據(jù):(經(jīng)常備份,各種備份)

使用命令行程序?mysqldump?轉(zhuǎn)儲所有數(shù)據(jù)庫內(nèi)容到某個外部文件。

mysqldump -u root -p 數(shù)據(jù)庫名> e:/backdatabase/備份文件名.sql(txt...).

恢復(fù):mysql -u root -p 數(shù)據(jù)庫名

或在數(shù)據(jù)庫內(nèi)部使用source命令。

使用命令行程序?mysqlhotcopy?從一個數(shù)據(jù)庫復(fù)制所有數(shù)據(jù)。

使用MySQL的backup table 或 select into outfile?轉(zhuǎn)儲所有數(shù)據(jù)到某外部文件。這兩條語句都接受將要創(chuàng)建的文件名,此文件必須不存在,否則會出錯。使用?restore table來復(fù)原。

在備份前使用 flush tables 刷新未寫數(shù)據(jù)。

2、進(jìn)行數(shù)據(jù)庫維護(hù):

analyze table 表名;用來檢查表鍵是否正確。

check table 表名;用來針對許多問題對表進(jìn)行檢查。

如果MyISAM表訪問產(chǎn)生不正確和不一致的結(jié)果,可能需要 repair table 來修復(fù)相應(yīng)的表。這條語句不應(yīng)該經(jīng)常使用,如果經(jīng)常使用,可能會有更大的問題要解決。

如果從一個表中刪除大量數(shù)據(jù),應(yīng)該使用 optimize table 來收回所用的空間,從而優(yōu)化表的性能。

3、診斷啟動問題:

服務(wù)器啟動問題通常在對MySQL配置或服務(wù)器本身進(jìn)行更改時出現(xiàn)。MySQL在這個問題發(fā)生時報告錯誤,但由于多數(shù)MySQL服務(wù)器是作為系統(tǒng)進(jìn)程或服務(wù)自啟動的,這些消息可能看不到。

在排除系統(tǒng)啟動問題是,首先應(yīng)該盡量用手動啟動服務(wù)器。MySQL服務(wù)器自身通過在命令行執(zhí)行 mysqld 啟動。mysqld命令的參數(shù)有:

--help 顯示幫助。

--safe-mode 裝載減去某些最佳配置的服務(wù)器。

--verbose 顯示全文本消息(與help聯(lián)合使用)

--version 顯示版本信息然后退出

4、查看日志文件:

MySQL維護(hù)管理員依賴的一系列日志文件,主要日志文件有以下幾種:

錯誤日志:它包含啟動和關(guān)閉問題以及任意關(guān)鍵錯誤的細(xì)節(jié)。此日志通常名為 hostname.err, 位于data目錄中,此日志名可用 --log-error命令更改。

查詢?nèi)罩?#xff1a;它記錄所有MySQL活動,在診斷問題時非常有用。此日志文件可能會很快地變得非常大,因此不應(yīng)該長期使用它。此日志通常名為hostname.org,位于data目錄中,此名字可以用 --log命令更改。

二進(jìn)制日志:它記錄更新過數(shù)據(jù)的所有語句。此日志通常名為hostname-bin,位于data目錄內(nèi)。此名字可以用--log-bin命令更改。

緩慢查詢?nèi)罩?#xff1a;顧名思義,此日志記錄執(zhí)行緩慢的任何查詢。這個日志在確定數(shù)據(jù)庫何處需要優(yōu)化很有用。此日志通常名為hostname-slow.log,位于data目錄中,此名字可以用 --log-slow-queries命令更改.

在使用日志時,可用flush logs語句來刷新和重新開始所有日志文件。

十五、改善性能:

1、MySQL使用一些列的默認(rèn)設(shè)置預(yù)先配置的,這些設(shè)置開始通常是很好的,但過一段時間后你可能需要調(diào)整內(nèi)存分配、緩沖區(qū)大小等。使用show variables; ?show status; ?查看當(dāng)前設(shè)置。

2、MySQL是一個多用戶多線程的DBMS,它經(jīng)常同時執(zhí)行多個任務(wù)。如果這些任務(wù)中的某一個執(zhí)行緩慢,則所有請求都會執(zhí)行緩慢,如果你遇到顯著的性能不良,可使用 show processlist; 顯示所有活動進(jìn)程(以及它們的線程ID和執(zhí)行時間)。你還可以用 kill 命令終結(jié)某個特定的進(jìn)程。

3、總是有不止一種方法編寫同一條select語句。應(yīng)該試驗聯(lián)結(jié)、并、子查詢等,找出最佳的方法。

4、使用 explain 語句讓MySQL解釋他講如何執(zhí)行一條select語句。

5、一般來說,存儲過程執(zhí)行得比一條一條地執(zhí)行其中的各條MySQL語句塊。

6、應(yīng)該總是使用正確的數(shù)據(jù)類型。

7、絕不要檢索比需求還要多的數(shù)據(jù)。不要使用select *(除非你真正需要每個列)

8、有的操作(包括insert)支持一個可選的 delayed 關(guān)鍵字,如果使用它,將把控制勵志返回給調(diào)用程序,并且一旦有可能就實際執(zhí)行該操作。

9、在導(dǎo)入數(shù)據(jù)時,應(yīng)該關(guān)閉自動提交。你可能還想刪除索引(包括 fulltext索引),然后再導(dǎo)入完成后再重建它們。

10、必須索引數(shù)據(jù)庫表以改善數(shù)據(jù)檢索的性能。確定索引什么不是一件微不足道的任務(wù),需要分析使用的select語句以找出重復(fù)的 where 和 order by子句。如果一個簡單的 where 子句返回結(jié)果所花的時間太長,則可以斷定其中使用的列就是需要索引的對象。

11、你的select語句中有一系列復(fù)雜的 or 條件嗎?通過使用多條select語句和連接它們的union語句,你能看到極大的性能改進(jìn)。

12、索引改善數(shù)據(jù)檢索的性能,但損害數(shù)據(jù)插入、刪除和更新的性能。則對經(jīng)常需要添加刪除數(shù)據(jù)的表如果不必要的話不要索引它們。

13、like 很慢。一般來說最好使用fulltext而不是like。

14、數(shù)據(jù)庫是不斷變化的實體。一組優(yōu)化良好的表一會兒后可能就面目全非了。由于表的使用和內(nèi)容的更改,理想的優(yōu)化和配置也會改變。

15、最重要的規(guī)則就是,每條規(guī)則在某些條件下都會被打破。

總結(jié)

以上是生活随笔為你收集整理的mysql谓词演算_MySQL基础知识的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。