.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...