mysql優化 優化分頁查詢

2021-10-04 06:19:07 字數 912 閱讀 9856

create table `goods` (

`id` bigint(20) unsigned not null auto_increment,

`name` varchar(10) default null,

`price` double default null,

`create_time` datetime default null,

primary key (`id`),

key `idx_name` (`name`) using btree

) engine=innodb auto_increment=12577925 default charset=utf8 row_format=compact;

在表當中我們插入了1000萬條資料.

查詢商品名稱查詢,從80萬資料上拿10條:

select * from goods where  limit 800000,10;
執行時間

方法

select

g.*

from

goods g

inner join

( select id from goods where name = "商品1" limit 800000, 10 ) t

on t.id = g.id;

我們先查詢出符合條件的id,在連線表查詢出資料

執行結果

原理:

當我們直接通過limit 直接查詢資料時,我們是通過name普通索引搜尋資料.比如我們有200萬條資料符合條件,我們就要去主鍵索引尋找200萬次.然後取出10條.

如果我們先根據name 查詢主鍵id,先獲取符合條件10條資料,我們再去表連線,我們只需要去主鍵索引上10次.

優化分頁查詢

我們一般使用分頁都是使用limit來完成的,如果資料量小的話還可以,但是當資料量非常大的時候,不建立索引,通過全表查詢,將會非常耗時,效能將受到很大的影響。第一種優化方式 在索引上完成排序分頁的操作,最後根據主鍵關聯回原表查詢所需要的其他列內容 例 我想對我之前的分頁進行優化,沒有優化前的sql語句...

MySQL如何優化分頁查詢

mysql如何優化分頁查詢一般分頁查詢是建立覆蓋索引能夠比較好的提公升效能。第一種優化思路 在索引上完成分頁操作,最後根據主鍵關聯回原表查詢所需要的其他列內容 未優化之前的sql,這個相當於是全表掃瞄 select film id,description from film order by tit...

MySQL 利用延遲關聯優化分頁查詢

通常會有一些起點巨大的分頁查詢,效率低下,例如 select from tab where create date 2018 12 20 13 20 10 and create date 2019 05 01 14 00 00 order by id limit 328000,10 假設tab是乙個...