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的扩展应用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: iphone ios7屏幕录制教程
- 下一篇: Switch游戏主机联机卡成龟速?不换硬