簡單的資料庫優化

2021-08-21 21:38:34 字數 3258 閱讀 5426

不管用什麼樣的語言,資料庫是必不可少的,因此資料庫優化是必備的。

下面列舉幾條基本的簡單的資料庫優化,環境是php + mysql。

大家都知道資料庫中的表越小,在它上面執行的查詢也就會越快。因此合理設定字段屬性,使資料庫表盡可能小點,是最簡單的資料庫優化了。

(1)越小的資料型別通常更好:越小的資料型別通常在磁碟、記憶體和cpu快取中都需要更少的空間,處理起來更快。

(2)簡單的資料型別更好:整型資料比起字元,處理開銷更小,因為字串的比較更複雜。在mysql中,應該用內建的日期和時間資料型別,而不是用字串來儲存時間;以及用整型資料型別儲存ip位址。

(3)盡量避免null:應該指定列為not null,除非你想儲存null。在mysql中,含有空值的列很難進行查詢優化,因為它們使得索引、索引的統計資訊以及比較運算更加複雜。你應該用0、乙個特殊的值或者乙個空串代替空值。

子查詢

insert into t1(a1) select b1 from t2 where not exists(select 1 from t1 where t1.id = t2.r_id);
join

insert into t1(a1)  

select b1 from t2

left join (select distinct t1.id from t1 ) t1 on t1.id = t2.r_id

where t1.id is null;

儘管sql語句越少,執行速度越快,但是有些時候,並不是一跳sql語句可以搞定的。比如說,某****付款完成要先扣餘額,然後訂單狀態成功,但是如果扣完錢了,資料庫突然崩潰,訂單狀態沒改,這就會出現很嚴重的問題。

下面介紹一下thinkphp的事務。

$order = m(『order』);

$alladded = true; //先設定乙個值為 true;

$data['name'] = 'winter';

$order->starttrans(); //開啟事物

for($i = 1;$i<3;$i++)

}//回滾

if($alladded)else

如果commit了。那麼就提交插入資料。如果發現alladded為假說明有條資料沒插入正確。那麼就rollback回滾就會取消事物開啟之後運算元據庫的所有行為。

索引對查詢的速度有著至關重要的影響,理解索引也是進行資料庫效能調優的起點。

索引是儲存引擎用於快速查詢記錄的一種資料結構,通過合理的使用資料庫索引可以大大提高系統的訪問效能,接下來主要介紹在mysql資料庫中索引型別,以及如何建立出更加合理且高效的索引技巧。

mysql常見索引有:主鍵索引、唯一索引、普通索引、全文索引、組合索引

primary key(主鍵索引)  alter table `table_name` add primary key ( `col` ) 

unique(唯一索引)     alter table `table_name` add unique (`col`)

index(普通索引)     alter table `table_name` add index index_name (`col`)

fulltext(全文索引)      alter table `table_name` add fulltext ( `col` )

組合索引   alter table `table_name` add index index_name (`col1`, `col2`, `col3` ) 

絕大多數情況下,使用索引可以提高查詢的速度,但如果sql語句使用不恰當的話,索引將無法發揮它應有的作用。下面是應該注意的幾個方面。首先,最好是 在相同型別的字段間進行比較的操作。在mysql 3.23版之前,這甚至是乙個必須的條件。例如不能將乙個建有索引的int欄位和bigint欄位進行比較;但是作為特殊的情況,在char型別的字段和 varchar型別欄位的字段大小相同的時候,可以將它們進行比較。其次,在建有索引的字段上盡量不要使用函式進行操作。

例如,在乙個date型別的字段上使用yeae()函式時,將會使索引不能發揮應有的作用。所以,下面的兩個查詢雖然返回的結果一樣,但後者要比前者快得多。

select*fromorderwhereyear(orderdate)<2001;

select*fromorderwhereorderdate<"2001-01-01";

同樣的情形也會發生在對數值型字段進行計算的時候:

select*frominventorywhereamount/7<24;

select*frominventorywhereamount<24*7;

上面的兩個查詢也是返回相同的結果,但後面的查詢將比前面的乙個快很多。第三,在搜尋字元型字段時,我們有時會使用 like 關鍵字和萬用字元,這種做法雖然簡單,但卻也是以犧牲系統效能為代價的。例如下面的查詢將會比較表中的每一條記錄。

select*frombooks

wherenamelike"mysql%"

但是如果換用下面的查詢,返回的結果一樣,但速度就要快上很多:

select*frombooks

wherename>="mysql"andname<"mysql"

最後,應該注意避免在查詢中讓mysql進行自動型別轉換,因為轉換過程也會使索引變得不起作用。

資料庫優化 資料庫設計優化

一 索引優化 1.首先索引不是越多越好,要視情況而定。因為索引會降低insert和update的效率 insert和update有時可能會重建索引。2.乙個表的索參數量最好不要超過6個,擇優而建。3.專案上線後,根據使用者的查詢條件字段稍微調整資料庫中的字段索引。二 分表 1.縱切 根據表字段來且分...

資料庫引擎優化顧問優化資料庫

現在一直在做的專案,資料量相對也不小,開始的時候沒有覺得,因為是剛開始,資料量還很小,在程式使用過程中速度還挺快,但是隨著資料量的不停的增長,發現程式越來越慢,甚至出現了超時的問題,因此要對程式和資料庫進行優化,前期專案比較緊,沒有針對大資料量業務進行分析設計,所以索引等相關優化沒有做到位,通過後期...

資料庫的優化

1.對查詢進行優化,要盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。2.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行全表掃瞄,如 select id from t where num is null 不要以為 ...