(1)要求取出練習的4個數字php
(2)要求取出,形式爲:xxx-yyy-xxx的數據html
正則中幾個概念:java
子表達式:簡單理解成用小括號括起的部分就是一個子表達式,mysql
捕獲:把子表達式的內容,保存在內存。linux
反向引用:圓括號的內容被捕獲後,能夠在這個括號後被使用。ios
(3)要求取出,形式爲:xxx-yzy-xxx的數據c++
(4)貪婪模式與非貪婪模式正則表達式
若是有U即換成非貪婪匹配。sql
貪婪:儘量的多匹配。編程
非貪婪:儘量的少匹配。
(5)匹配中文
案例:結巴程序:
$str=」我我要要….學學php編編….程」;
直接變成:我要學習php編程
提示:使用該函數來完成,preg_replace()
主要是三個配置:
RewriteEngine on
RewriteCond
RewriteRule
RewriteEngine on 重寫引擎開關,一旦開啓,全部的重寫條件都生效。
RewriteCond 重寫條件,當達到什麼條件時,完成重寫。
語法爲:
RewriteCond 判斷依據 條件表達式 [條件標誌]
判斷依據可使用服務器變量。服務器能夠獲得一些特定信息
條件表達式,能夠爲以下形式:
正則或特殊標識
-f 表示是一個文件。
-d 表示是一個目錄
正則,正則表達式字符串。
條件標誌:
[OR] 條件間的或者關係,當出現多個條件時,默認爲而且的關係,條件應該是或者的關係下,可使用OR來表示!
[NC]條件不區分大小寫。條件匹配時不區分大小寫
[OR,NC]
RewriteRule :定義重寫規則,哪一個地址應該被重寫到哪一個目標地址。
語法:
RewriteRule 匹配地址 目標地址 [標識]
匹配的地址:所請求的地址,可以使用正則匹配
目標地址: 所重寫到的地址,可使用反向引用!$N表示正則匹配到的第N個子模式!
好比:RewriteRule goods-id(\d+)\.html goods.php?id=$1
標誌:
[NC] 不區分大小寫
[QSA] 查詢字符串追加,在目標地址已經具備get參數時,會將真實請求的get參數追後邊。
若是訪問的文件存在,則訪問該文件,若不存在,則執行重寫:
好比請求: www.demo.com/index.html 若是index.html 文件存在,則請求該文件,若是不存在執行重寫規則。
實現步驟:
使用分佈式文件來完成配置,在網站的根目錄下面新建一個.htacccess的文件。
(1)在www.demo.com網站根目錄下面新建一個.htaccess的文件。
經過編輯器另存爲的方式來創建該文件。
(2)修改虛擬主機裏面的配置。
(3)在.htaccess文件裏面的,具體的配置
僞靜態網址:http://www.myecshop.com/goods-36.html
重寫到該地址:http://www.myecshop.com/goods.php?id=36
http://www.myecshop.com/goods.php?id=39 該地址的僞靜態網址是:
http://www.myecshop.com/goods-39.html
重寫規則應該如何寫?
goods-(\d+).html goods.php?id=$1
讓ecshop支持重寫,把到商品詳情頁面的連接地址變成僞靜態的。
具體的配置:
(1)什麼是盜鏈,
原理圖說明:
(2)如何判斷請求的來源,使用 referer頭信息。
(3)具體的配置,只容許本網站的頁面來訪問該圖片,
也能夠把請求的圖片重寫到一個警示圖片,
效果以下:
僞靜態經常使用:把html地址,重寫成php地址。
[QSA] 查詢字符串追加,在目標地址已經具備get參數時,會將真實請求的get參數追後邊。
123.php代碼:
在重寫規則裏面沒有帶[QSA]
效果以下:
在重寫規則裏面添加[QSA]
效果以下:
設計角度:存儲引擎的選擇,字段類型選擇,範式
利用mysql自身的特性:索引,查詢緩存,分區分表,存儲過程,sql語句優化配置,
部署大負載架構體系:主從複製(讀寫分離)。
硬件升級:
要分析的sql語句是執行速度比較慢的。查找執行速度比較慢的sql語句。找到後,具體分析。
是一種mysql提供的日誌,記錄全部執行時間超過某個時間界限的sql的語句。這個時間界限,咱們能夠指定。在mysql中默認沒有開啓慢查詢,即便開啓了,只會記錄執行的sql語句超過10秒的語句。
如何開啓慢查詢日誌:
打開mysql的配置文件,window下是:my.ini linux系統下是my.cnf
注意: 修改完成後,要重啓mysql。
測試慢查詢日誌是否記錄超過0.5秒的sql 語句。
benchmark(count,expr)函數能夠測試執行count次expr操做須要的時間。
查看慢查詢日誌裏面記錄的sql語句的狀況。
在mysql的客戶端進行查看慢查詢日誌的時間界限
也能夠更改該時間界限,只對當前會話有效。
該機制可以精確的記錄執行sql語句的時間,能精確到小數點後8位
開啓方式:直接在 mysql的客戶端進行開啓
set profiling=1|0(開啓和關閉)
查看記錄的時間:
show profiles
注意:不適應時,最好將其關閉
php當mysql的客戶端,php代碼如何實現,
//開啓
$sql=」set profiling=1」;
mysql_query($sql);
//查詢
$sql=」show profiles」;
mysql_query($sql);
一個sql語句執行比較慢,大多數的緣由是沒有用到索引,
索引的做用:是用於快速定位實際數據位置的一種機制。
索引在mysql中,是獨立於數據的一種特殊的數據結構。
普通索引:
利用特定的關鍵字,標識數據記錄的位置(磁盤上的位置,盤號,柱面,扇面,磁道)。
惟一索引:
限制索引的關鍵字不能重複的索引。
主鍵索引:
限制索引的關鍵字不能重複,而且不能爲NULL。(不能爲NULL的惟一索引)。一個表中只容許有一個主索引。
全文索引:
索引的關鍵字,不是某個字段的值,而是字段值中有意義的詞來做爲關鍵字創建索引。
複合索引,若是一個索引(以上四種任何均可以),是依賴於多個字段建立的化,稱之爲複合索引。
一個myisam表的對應的三個文件,表結構文件.frm 數據文件.myd 索引文件.myi
添加一個普通索引後,索引文件會變大,
第一種方式,在建立表時,一塊建立索引。
第二種方式:建完表後,以alter方式創建索引。
刪除主鍵索引:alter table tablename drop primary key
在刪除主鍵索引時,要注意是否有auto_increment屬性,若是有,則先要刪除該屬性,才能刪除主鍵索引。
刪除其餘索引:alter table tablename drop index 索引的名字
注意:若是沒有指定索引的名字則是使用該字段名稱做爲索引的名字的。
show indexes from table_name;
show index from table_name
show create table table_name
show keys from table_name
desc table_name
(1)較頻繁的做爲查詢條件字段應該建立索引
select * from emp where empno = 1
(2)惟一性太差的字段不適合單首創建索引,即便頻繁做爲查詢條件
select * from emp where sex = '男‘
好比: is_best is_new is_hot is_sale is_delete
(3)更新很是頻繁的字段不適合建立索引
select * from emp where logincount = 1
好比登陸的狀態,
(4)不會出如今WHERE子句中字段不應建立索
索引的節點中存儲的是數據的物理地址(磁道和扇區)
在查找數據時,查找到索引後,根據索引節點中的物理地址,查找到具體的數據內容
innodb的主鍵索引文件上 直接存放該行數據,稱爲聚簇索引,非主索引指向對主鍵的引用
myisam中, 主索引和非主索引,都指向物理行(磁盤位置).
注意: innodb來講,
1: 主鍵索引 既存儲索引值,又在葉子中存儲行的數據
2: 若是沒有主鍵, 則會Unique key作主鍵
3: 若是沒有unique,則系統生成一個內部的rowid作主鍵.
4: 像innodb中,主鍵的索引結構中,既存儲了主鍵值,又存儲了行數據,這種結構稱爲」聚簇索引」
先建立一個 myisam引擎的表,並插入數據
create table t5(
id int primary key auto_increment,
name varchar(12) not null comment '名稱'
)engine myisam charset utf8;
說明:mysiam引擎的表的數據是按照插入的順序顯示的。
再建立一個inodb引擎的表,並插入數據
create table t6(
id int primary key auto_increment,
name varchar(12) not null comment '名稱'
)engine innodb charset utf8;
說明:innodb引擎的表的數據是按照主鍵的順序插入的。
主要用於分析sql語句的執行狀況(並不執行sql語句)獲得sql語句是否使用了索引,使用了哪些索引。
語法:explain sql語句\G 或 desc sql語句\G
在mysql以前的版本中,explain只支持select語句,可是在最新的5.6版本中,它支持 explain update/delete了。
作實驗建立幾張表:
create table user(
id int primary key auto_increment,
name varchar(32) not null default '',
age tinyint unsigned not null default 0,
email varchar(32) not null default '',
classid int not null default 1
)engine myisam charset utf8;
insert into user values(null,'xiaogang',12,'gang@sohu.com',4),
(null,'xiaohong',13,'hong@sohu.com',2),
(null,'xiaolong',31,'long@sohu.com',2),
(null,'xiaofeng',22,'feng@sohu.com',3),
(null,'xiaogui',42,'gui@sohu.com',3);
建立一個班級表:
create table class(
id int not null default 0,
classname varchar(32) not null default ''
)engine myisam charset utf8;
insert into class values(1,'java'),(2,'.net'),(3,'php'),(4,'c++'),(5,'ios');
explain sql語句:
select_type:SIMPLE
表示查詢的類型,此處是一個簡單的查詢
table :user;
表示要查詢的表。
type列:是指查詢的方式,很是重要,是分析「查數據過程」的重要依據。
可能的值:all index range ref const
possible_key:可能用到的索引
注意:系統估計可能用的幾個索引,但最終,只能用1個。
key:最終用的索引。
key_len:使用的索引的最大長度。
rows:是指估計要掃描多少行。
extra:
using index :是指用到了索引覆蓋,效率很是高
using where:是指光靠索引定位不了,還得where判斷一下。
using temporary:是指用上了臨時表,group by 與order by不一樣列時,或grop by,order by 別的表的列。
using filesort:文件排序(文件可能在磁盤,也可能在內存)
all:是掃描全部的數據行,性能最差,通常是沒有添加索引,或沒有使用到索引,
index:比all性能稍好一點,是指要掃描全部的索引節點。
出現index, 則說明只在索引文件中查找。
(1)索引覆蓋的查詢狀況下,能利用上索引,可是又必須全索引掃描。
(2)是利用索引來排序,但只能取出索引的列。
range:意思是查詢時,能根據索引作範圍掃描。
ref:是指,經過索引列,能夠直接引用到某些數據行。
const,system,null這3個分別指查詢優化到常量級別,甚至不須要查找時間。
通常按照主鍵來查詢時,易出現 const,system
或者直接查詢某個表達式,不通過表時,出現null.