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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql扩展使用_mysql的扩展应用

發布時間:2024/9/19 数据库 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql扩展使用_mysql的扩展应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

sql優化:

1、硬件優化

sql服務器的機械硬盤換成固態硬盤,mysql升級更高的版本

2、軟件優化

設計數據庫符合三范式(3nf)標準

建立有效的索引

編寫查詢語句時,用什么字段拿什么字段

中間層優化,把常用的不經常改變的數據放到緩存里,直接去緩存拿數據,緩存中沒有再去數據庫拿

防sql注入:

1、對輸入的數據進行過濾,對發送到數據庫的數據進行轉義

if(!get_magic_quotes_gpc()){ //判斷是否開啟

$newStr=addslashes($str); //然后用addslashes函數過濾

}

2、過濾一些常見的數據庫操作關鍵字

$post = implode(',',$_POST);

preg_match('/select|insert|update|delete|and|or|create|alter|count|union|into|

load_file|outfile|'|''/i',$post)?// 進行過濾

3、使用pdo預處理機制

跨站腳本的過濾:

RemoveXSS($post['name']);(RemoveXss是自己封裝的函數)

join(連接):

select a.id,a.name,a.age,b.sex from 表A a LEFT JOIN 表B b on a.id = b.typeId;

說明:LEFT JOIN 左連接,除了獲取符合的數據外,還獲取左表的全部數據(字段的值不重復,若重復,后面的值覆蓋前面的值),若右表無對應數據,則該字段的值顯示為NULL

時間搜索:

?>

mysql的悲觀鎖和樂觀鎖:

樂觀鎖:比較適合讀取操作比較頻繁的場景,如果出現大量的寫入操作,數據發生沖突的可能性就會增大,為了保證數據的一致性,應用層需要不斷的重新獲取數據,這樣會增加大量的查詢操作,降低了系統的吞吐量。

悲觀鎖:比較適合寫入操作比較頻繁的場景,如果出現大量的讀取操作,每次讀取的時候都會進行加鎖,這樣會增加大量的鎖的開銷,降低了系統的吞吐量。

mysql的索引:

索引類型:

normal:表示普通索引

unique:表示唯一索引,不允許重復的索引,如果該字段信息保證不會重復例如身份證號用作索引時,可設置為unique

full textl: 表示全文搜索的索引。 FULLTEXT 用于搜索很長一篇文章的時候,效果最好。用在比較短的文本,如果就一兩行字的,普通的 INDEX 也可以。

總結,索引的類別由建立索引的字段內容特性來決定,通常normal最常見。

索引方法(Innodb和MyISAM默認的索引是Btree索引):

HASH(用于對等比較,如"="和" <=>")? ?//<=> 安全的比對? ?,用與對null值比較,語義類似is ????null()

BTREE(用于非對等比較,比如范圍查詢)>,>=,

復合索引:

兩個或更多個列以上的索引被稱作復合索引。

利用索引中的附加列,您可以縮小搜索的范圍,但使用一個具有兩列的索引不同于使用兩個單獨的索引。

復合索引的結構與電話簿類似,人名由姓和名構成,電話簿首先按姓氏對進行排序,然后按名字對有相同姓氏的人進行排序。如果您知道姓,電話簿將非常有用;如果您知道姓和名,電話簿則更為有用,但如果您只知道名不姓,電話簿將沒有用處。

所以說創建復合索引時,應該仔細考慮列的順序。對索引中的所有列執行搜索或僅對前幾列執行搜索時,復合索引非常有用;僅對后面的任意列執行搜索時,復合索引則沒有用處。

注意:

復合索引建立之后,索引列中的第一個字段索引就可以取消設置了;因為單獨查詢索引字段時,SQL會直接走復合索引而不會走獨立索引

舉例1:

復合索引字段? ?index 【status,name,price,type,time】

where條件????status = 1

他也可以走這個index索引(因為status字段在索引的的首位)

舉例2:

復合索引字段? ?index 【status,name,price,type,time】

where條件? status = 1 and time > 1555555555

他也可以走這個index索引(按照字段順序能找到對應字段)

舉例3:

復合索引字段? ?index 【status,name,price,type,time】

where條件? status = 1 and price> 10.99 and name = 'zhangsan'

他不走這個index索引(沒有按照字段的順序)

總結:

如果復合索引使用效果不好(速度是否有提升,是否影響其他索引條件),設置獨立索引,反之亦然

mysql語句的優化分析(explain):

mysql的where計算次序優先級:

非(!)>與(&&)>或(||)

解決方法:使用圓括號明確地分組相應的操作符,就不會走優先級

(id >1 or name='zhangsan')and sex='nan'

提示:

任何時候使用具有AND和OR操作符的WHERE子句,都應該使用圓括號明確地分組操作符,不要過分依賴默認計算次序,即使它確實是你想要的東西也是如此;使用圓括號沒有什么壞處,它能消除歧義。

mysql的正則表達式:

where name REGEXP'1000|2000'

語句中使用了正則表達式1000|2000,|為正則表達式的OR操作符,它表示匹配其中之一,因此1000和2000都匹配并返回。

mysql的慢查詢日志:

什么是慢查詢?

答:在MySQL數據庫中慢查詢是在日志中記錄執行速度慢的SQL語句,這個功能需要被開啟才能被使用。在Windows系統下的MySQL?配置文件一般是是my.ini找到[mysqld]下面加上

代碼如下:

slow_query_log=on

slow_query_log_file = D:/phpstudy_pro/Extensions/MySQL8.0.12/data/slow_man.log

long_query_time = 1

2. 在Linux系統下的MySQL

配置文件一般是是my.cnf找到[mysqld]下面加上

代碼如下:

slow_query_log=on

slow_query_log_file = /var/lib/mysql/logs/slow.log

long_query_time = 1

說明:long_query_time是指執行超過多久的SQL會被日志記錄下來,這里是10 秒;

log-slow-queries設置把日志寫在那里(例子中慢查詢日志會寫到文件/var/lib/mysql/mysql-slow.log中),為空的時候,

系統會給慢查詢日志賦予主機名,并加上slow.log。如果設置了參數log-long-format ,那么所有沒有使用索引的查詢也將被記錄。

這個日志對性能的影響不大(所有的查詢耗時都很小的情況下),并且強調了那些需要在意的查詢(從結果中可以分析出那些查詢SQL語句需要優化或者那些索引需要添加或者那些索引沒有失效了)。

總結

以上是生活随笔為你收集整理的mysql扩展使用_mysql的扩展应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。