1
select *
from
table
where
year(d
)>
2011
;
優化為: 1
select *
from
table
where
d>
'2011-01-01';
12
3
4
select
*from
ajoinbon
a.id=
b.id left
joincon
c.time=d
.date
left
joindon
c.pid=b.
aid left
joineon
e.cid=a.
did;
例如原句為: 1
select
*from
table
where
name
like%de
%;優化為:
1
select
*from
table
where
name
>=
'de'
andname
<
'df'
;//侷限性很大[慎重]
例如原句為: 1
select
*from
tabel;
(據說有公司見遇到乙個 * 號 扣10塊錢~~~
優化為:
1
selectid,
name
,age
from
table
;
(需要多少取多少,是 * 的話,如果無用字段資料過大則記憶體消耗比較大)
例如原語句: 1
2
3
insert
into
table(id
,name
)values(1
,'sunphp');
insert
into
table(id
,name
)values(2
,'mysql');
insert
into
table(id
,name
)values(3
,'優化');
優化為:
1
2
insert
into
table(id
,name
)values(1
,'sunphp'),
values(2
,'mysql'),
values(3
,'優化');
例如原句為: 1
select
*from
article
order
byid
limit
1000000,10
; 優化為:
1
select
*from
article
where
id between
1000000
and1000010
order
byid
;
between 限定比limit快,所以在海量資料訪問時,建議用between 或是 where 替換掉 limit。
但是between 也有缺陷,如果id中間有斷行或是中間部分id不讀取的情況,總讀取量可能小於預計讀取量(有損服務)。
在去比較靠後的資料時,通過 desc 方式吧資料反向查詢,以減少對前面資料的掃瞄,讓 limit 得基數越小越好。 1
select
*from
table
order
byrand()
limit20;
使用下面的語句代替: 1
2
3
4
5
select
*from
table
ast1
join(
select
round
(rand()
*(select
max(id)
from
table)-
(select
min(id)
from
table))
+(select
min(id)
from
table)
)asid
)ast2
wheret1.
id>=t2.
idorder
byt1.id
limitt1;
這是獲得一條隨機記錄,這樣即使執行20次,也比原來的語句效率高。或者先用php產生隨機數,把這些字元傳給mysql,mysql 裡面使用 in 查詢。
帶你深入了解MySQL語句優化的基本原則
mysql語句優化的基本原則 1 使用索引來更快地遍歷表。預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,資料在物理上隨機存放在資料頁上。合理的索引設計要建立在對各種查詢的分析和 上。一般來說 a.有大量重複值 且經常有範圍查詢 和order by group by發生的列,...
mysql 語句優化例項 MySQL 語句優化例項
優化 limit 分頁 執行耗時 1.379s select from vio basic domain info limit 1000000,10 處理分頁慢查詢的方式一般有以下幾種 思路一 構造覆蓋索引 思路二 優化 offset 無法用上覆蓋索引,那麼重點是想辦法快速過濾掉前 100w 條資料...
mysql語句優化原則 MySQL語句優化的原則
1 使用索引來更快地遍歷表。預設情況下建立的索引是非群集索引,但有時它並不是最佳的。在非群集索引下,資料在物理上隨機存放在資料頁上。合理的索引設計要建立在對各種查詢的分析和 上。一般來說 a.有大量重複值 且經常有範圍查詢 和order by group by發生的列,可考慮建立群集索引 b.經常同...