1. 程式人生 > >資料庫Mysql其他細節點

資料庫Mysql其他細節點

目錄

檢視是一種虛擬的表,具有和物理表相同的功能。可以對檢視進行增,改,查,操作,檢視通常是有一個表或者多個表的行或列的子集。對檢視的修改不影響基本表。它使得我們獲取資料更容易,相比多表查詢。

1.只暴露部分欄位給訪問者,所以就建一個虛表,就是檢視。

2.查詢的資料來源於不同的表,而查詢者希望以統一的方式查詢,這樣也可以建立一個檢視,把多個表查詢結果聯合起來,查詢者只需要直接從檢視中獲取資料,不必考慮資料來源於不同表所帶來的差異  

說一下preparedStatement和statement的區別與聯絡:在JDBC應用中,如果你已經是稍有水平開發者,你就應該始終以PreparedStatement代替Statement.也就是說,在任何時候都不要使用Statement。PreparedStatement 介面繼承 Statement ,PreparedStatement 例項包含已編譯的 SQL 語句, 所以其執行速度要快於 Statement 物件。 Statement為一條Sql語句生成執行計劃, 如果要執行兩條sql語句

select colume from table where colume=1;select colume from table where colume=2; 會生成兩個執行計劃 一千個查詢就生成一千個執行計劃! PreparedStatement用於使用繫結變數重用執行計劃 select colume from table where colume=:x; 通過set不同資料只需要生成一次執行計劃,可以重用。

並且PreparedStatement可以防止SQL攻擊

1.建索引

2.減少表之間的關聯

3.優化sql,儘量讓sql很快定位資料,不要讓sql做全表查詢,應該走索引,把資料量大的表排在前面

4.簡化查詢欄位,沒用的欄位不要,以及對返回結果的控制,儘量返回少量資料

5.儘量用PreparedStatement來查詢,不要用Statement

UNION在進行錶鏈接後會篩選掉重複的記錄,所以在錶鏈接後會對所產生的結果集進行排序運算,刪除重複的記錄再返回結果。實際大部分應用中是不會產生重複的記錄,最常見的是過程表與歷史表UNION。 UNION ALL只是簡單的將兩個結果合併後就返回。這樣,如果返回的兩個結果集中有重複的資料,那麼返回的結果集就會包含重複的資料了。 從效率上說,UNION ALL 要比UNION快很多,所以,如果可以確認合併的兩個結果集中不包含重複的資料的話,那麼就使用UNION ALL。

    在Limit的偏移量offset上,比如limit 100000,10雖然最後只返回10條資料,但是偏移量卻高達100000,資料庫的操作其實是拿到100010資料,然後返回最後10條。

    那麼解決思路就是,我能不能跳過100000條資料然後讀取10條,而不是讀取100010條資料然後返回10條資料。(案例中出發於無法直接推算出第100000條資料的id)

    原SQL語句:select * from mytbl order by id limit 100000,10;

    改進後的SQL語句如下:

        select * from mytbl where id >= (select id from mytbl order by id limit 10000,1) limit 10;

注:假設id是主鍵索引,那麼裡層走的是索引,外層也是走的索引,所以效能大大提高

存在三個關係,分別是:

使用者--主題帖:一個使用者可以發0個或多個帖子,一個帖子對應一個使用者(一對多關係),

主題帖—評論帖:一個主題有0個或多個評論帖子,一個評論帖子對應一個主題(一對多關係);

使用者—評論貼:一個使用者可以評0個或多個帖,一個帖子對應一個使用者(一對多關係)。

對三個關係不應該分別建表,而是把使用者的id作為主題表和評論表的外來鍵,把主題貼id作為回帖表的外來鍵。

使用者表

欄位名

型別

預設值

中文含義

約束

備註

id

Int

使用者編號

PRI

Auto_increment

Name

Varchar(30)

使用者名稱

Password

Varchar(20)

密碼

Email

Varchar(50)

郵箱

Phone

Varchar(30)

手機

Addr

Varchar(200)

地址

Role

int(1)

使用者角色

帖子表:檢索userID=某個使用者id時的帖子資訊

欄位名

型別

預設值

中文含義

約束

備註

id

Int

貼編號

PRI

Auto_increment

Title

Varchar(200)

發帖標題

Content

Text

發帖內容

UserID

Int

使用者編號

外來鍵

評論表:檢索mainId=某個帖子ID時的評論資訊。查詢子評論:檢索parentID=id

欄位名

型別

預設值

中文含義

約束

備註

id

Int

貼編號

PRI

Auto_increment

Title

Varchar(200)

發帖標題

Content

Text

發帖內容

UserID

Int

使用者編號

外來鍵

FatherID

Int

父編號

MainID

Int

主題帖編號

外來鍵