MySQL的分頁與索引

2021-08-20 04:52:00 字數 3717 閱讀 7598

.mysql的分頁

一:分頁需求:

客戶端通過傳遞start(頁碼),limit(每頁顯示的條數)兩個引數去分頁查詢資料庫表中的資料,那我們知道mysql資料庫提供了分頁的函式limit m,n,但是該函式的用法和我們的需求不一樣,所以就需要我們根據實際情況去改寫適合我們自己的分頁語句,具體的分析如下:

比如:查詢第1條到第10條的資料的sql是:select * from table limit 0,10;   ->對應我們的需求就是查詢第一頁的資料:select * from table limit (1-1)*10,10;

查詢第10條到第20條的資料的sql是:select * from table limit 10,20;  ->對應我們的需求就是查詢第二頁的資料:select * from table limit (2-1)*10,10;

查詢第20條到第30條的資料的sql是:select * from table limit 20,30;  ->對應我們的需求就是查詢第三頁的資料:select * from table limit (3-1)*10,10;

二:通過上面的分析,可以得出符合我們自己需求的分頁sql格式是:select * from table limit (start-1)*limit,limit; 其中start是頁碼,limit是每頁顯示的條數。

唯一索引(unique):不允許兩行具有相同的索引值(建立了唯一約束,系統將自動建立唯一索引)

主鍵索引:主鍵索引要求主鍵中的每個值是唯一的,(建立主鍵自動建立主鍵索引)

聚集索引(clustered):表中各行的物理順序與鍵值的邏輯(索引)順序相同,表中只能包含乙個聚集索引,主鍵列缺省為聚集索引

非聚集索引(nonclustered):表中各行的物理順序與鍵值的邏輯(索引)順序不匹配,表中可以有249個非聚集索引

使用create index語句建立索引:

create[ unique ] [ clustered | nonclustered ] index

索引名

on (

列名[ asc | desc ] [ ,...n ] )

例:在資料庫

hrsystem

中為表employees

建立基於

idcard

列的唯一索引

ix_employees

,可以使用以下命令:

use 

hrsystem

go create unique nonclustered index [

ix_employees

] on 

dbo.employees

(idcard

) go

例: 為表

employees

建立基於列

idcard

的唯一、聚集索引

ix_employees1

,可以使用以下命令:

use 

hrsystem

go create unique clustered index [ix_employees1] on [

dbo].[employees](

idcard

) go

需要注意的是,在乙個表中只允許存在乙個聚集索引。因此,如果表

employees中已經存在乙個聚集索引,則執行上面的語句時將會提示下面的錯誤資訊。 訊息

1902

,級別16

,狀態3,第1

行 無法對錶

'dbo.employees

'建立多個聚集索引。請在建立新聚集索引前刪除現有的聚集索引

'pk__employee__263e2dd300551192'

。 例:

對錶employees

的列emp_name

按照降序建立索引,可以使用以下命令:

use 

hrsystem

go create nonclustered index [ix_employees2] on [

dbo].[employees]

( [emp_name

] desc

) go

在create index

語句中使用

include

子句,可以在建立索引時定義包含的非鍵列,其語法結構如下:

create nonclustered index 索引名

on ( 列名 [ asc | desc ] [ ,...n ] )

include (《列名1>, 《列名2>, [,… n])

例: 在表employees

上建立非聚集索引

ix_wage

,索引中的鍵列為

wage

,非鍵列為

emp_name

、***

和title

,具體語句如下:

use hrsystem

go create nonclustered index ix_wage

on employees ( wage )

include (emp_name, ***, title)

go 例:

在建立索引

ix_wage

後,當表

employees

中的資料量比較大時,執行下面的

select

語句將會明顯地改進查詢效率。

use 

hrsystem

go select 

emp_name

, ***, title, wage

from employees

where wage between 1000 and 3000

go 修改索引:

在sql server management studio

中,選擇並右擊要建立索引的表,從彈出的選單中選擇

「設計表

」,開啟表設計器。右鍵單擊表設計器,從彈出選單中選擇「索引

/鍵」命令,開啟「索引

/鍵」對話方塊,並檢視已經存在的索引及修改索引的屬性資訊。

也可以使用

alter index

語句修改索引,其基本語法如下:

alter index

on 《表名|

檢視名》

[ ; ]

alter index

語句的引數比較複雜,這裡只介紹它的基本使用情況。引數說明如下:

rebuild

指定重新生成索引。

disable

指定將索引標記為已禁用。

reorganize

指定將重新組織的索引葉級。

例: 要禁用索引

ix_employees

,可以使用下面的語句:

use 

hrsystem

go alter index 

ix_employees

on employees disable

go 刪除索引: 在

sql server management studio

中,選擇並右擊要建立索引的表,從彈出的選單中選擇

「設計表

」。開啟表設計器。右鍵單擊表設計器,從彈出選單中選擇「索引

/鍵」命令,在開啟的「索引

/鍵」對話方塊中列出了已經存在的索引。單擊「刪除

」按鈕,即可刪除索引資訊。

drop index 表名.

索引名|

檢視名.

索引名[ ,...n ]

原文載於:

web mysql 分頁 MySQL與分頁

如果和mssql的top語法相比,那麼的limit語法要顯得優雅了許多。使用它來分頁是再自然不過的事情了。最基本的分頁方式 select from where order by limit 在中小資料量的情況下,這樣的sql足夠用了,唯一需要注意的問題就是確保使用了索引 舉例來說,如果實際sql類似...

mysql覆蓋索引 MySQL 的覆蓋索引與回表

兩大類索引 使用的儲存引擎 mysql5.7 innodb 聚簇索引 如果表設定了主鍵,則主鍵就是聚簇索引 如果表沒有主鍵,則會預設第乙個not null,且唯一 unique 的列作為聚簇索引 以上都沒有,則會預設建立乙個隱藏的row id作為聚簇索引 innodb的聚簇索引的葉子節點儲存的是行記...

mysql 索引與約束 mysql約束與索引的區別

摘自 一 約束 作用 是為了保證資料的完整性而實現的摘自一套機制,它具體的根據各個不同的資料庫的實現而有不同的工具 約束 這裡主要講解mysql的約束 1 非空約束 not null 指示某列不能儲存null 值 2 唯一約束 unique uk unique約束的字段,要求必須是唯一的,但null...