1. 程式人生 > >四、優化資料庫,將不同功能的表分別建立在不同的庫中,儘量避免表的聯合查詢,重視索引

四、優化資料庫,將不同功能的表分別建立在不同的庫中,儘量避免表的聯合查詢,重視索引

        對於大型網站最終資料庫將會是瓶頸,因為對於網站程式來說可以架構負載平衡,讓多個伺服器來分擔執行程式,但要讓多個伺服器同時操作一個數據庫是比較困難的,也因此最終會選擇把一個庫分成多個庫的方式來讓多臺伺服器分擔資料庫的壓力,所以我建議在最初就根據功能將表分開放在不同的資料庫中。

        因為要分資料庫,最初的架構(分的各種資料庫)隨著網站流量的增加可能會不能滿足需要,因而可能需要再次將已有的資料庫細分,所以我們要儘量避免使用表的聯合查詢,不然再次分資料庫的過程就需要大量的改動程式;還有就是表的聯合查詢本身就是沒有多少效率的行為。

        如果你發現數據庫伺服器的CPU佔用到了70%以上,首先要檢查資料庫的索引建好了嗎?索引對資料庫來說是至關重要的,不要忽視它,我公司的一臺資料庫伺服器在沒加索引與加過索引的區別是,前者CPU佔用達60%~80%以上,而後者只有5%左右。

        如何建立索引呢?一般是在程式中where後的欄位都加上索引(除了用於like查詢的欄位),實際測試發現bit型別的資料加不加索引的區別不大。當然索引多了因為要維護索引會減慢資料庫插入、更新資料的速度,但這種影響是很小的,相對網站中大量的查詢操作,這種影響應該是可以忽略的。

相關推薦

優化資料庫不同功能分別建立不同儘量避免聯合查詢重視索引

        對於大型網站最終資料庫將會是瓶頸,因為對於網站程式來說可以架構負載平衡,讓多個伺服器來分擔執行程式,但要讓多個伺服器同時操作一個數據庫是比較困難的,也因此最終會選擇把一個庫分成多個庫的方式來讓多臺伺服器分擔資料庫的壓力,所以我建議在最初就根據功能將表分開放在不

用戶組或角色 'zgb' 在當前數據已存在。 (Microsoft SQL Server錯誤: 15023)

href 角色 比較 chan 通過 sql ref lac 區別 在使用SQL Server 時,我們經常會遇到一個情況:需要把一臺服務器上的數據庫轉移到另外一臺服務器上。而轉移完成後,需要給一個"登錄"關聯一個"用戶"時,往往會發生錯誤: “錯誤15023:

zabbix3.4資料庫遷移server和database分到不同的兩臺server

zabbix目前已經是很多公司採用的比較常見的一種系統監控工具,單從個人經驗來講,安裝zabbix應該將資料庫和zabbix-server分開安裝到不同兩臺機器,然後通過網路(最好是內網)連線訪問資料庫是一種比較好的方式。 將資料庫和zabbix-server分開安裝的好處

SQL不同伺服器資料庫之間資料操作(當在一個伺服器的某張有資料更新時更新值通過觸發器插入到另一個伺服器的指定

第一步:在建立觸發器的伺服器上建立連結伺服器 建立連結伺服器有兩種方法:1.通過SQL語言建立,2.通過資料庫管理工具建立,下面分別進行詳細介紹: 1.通過SQL語言建立 通過SQL語言建立連結伺服器方法 2.通過資料庫管理工具建立(這裡以SQL SER

()讀取資料庫資料並在HighCharts上顯示

在上一篇簡單的靜態例子中,大家應該可以看得出,圖表裡橫縱座標的資料都是靜態的幾個資料,因此我們只要從資料庫讀取出我們想要的橫縱座標值,然後動態賦給Chart就行了。 X軸:      xAxis: {                     categories: ['週

Sybase資料庫的常用工具說明

Sybase的資料庫安裝目錄中提供了我們常用的幾種工具,依次開啟開始->程式->Sybase,這裡只說明我們常用的幾種工具。如下圖: 1.Dsedit Utility 這個工具是設定S

Windows下docker的安裝ASP.NET Core程序部署在docker

很好 etc all 虛擬 mark work 記得 配置 netcore 參考文章: https://www.cnblogs.com/jRoger/p/aspnet-core-deploy-to-docker.html https://www.cnblogs.com/jR

使用IO流數據數據生成一個文件結果使用Notepad++打開部分數據結尾出現NUL

port pub != 生成 lis [] light odi byte 場景描述:   項目中通過java代碼中從數據庫中查詢一系列數據,對數據做相應處理,然後通過字符流將數據寫如一個新生成的文件中,將該項目部署在linux服務器上,最後生成的文件拿到本地使用notep

帶頭結點的兩個連結串列La,Lb兩個連結串列合併到La並且不破壞Lb的結構

#include<stdio.h>#include<malloc.h> typedef struct LNode{ int data; struct LNode *next;}LNode,*LinkList; void CreateList(LinkList &L,int

Python練習題8(替換相同的字符串並輸出):輸入兩個字母串兩個字母串都包含的字母用'_'替換後輸出兩個字母串的剩余部分 (不能為空串區別大小寫只能包含字母)

format pre 兩個 div form tput nco encode col 方法一:檢查輸入是否為空串,循環字母串,相同的則替換,然後再用replace()方法去除,輸出想要的結果 1 def str_replace(messages1,messages2):

Python練習題8(替換相同的字串並輸出):輸入兩個字母串兩個字母串都包含的字母用'_'替換後輸出兩個字母串的剩餘部分 (不能為空串區別大小寫只能包含字母)

方法一:檢查輸入是否為空串,迴圈字母串,相同的則替換,然後再用replace()方法去除,輸出想要的結果 1 def str_replace(messages1,messages2): 2 if messages1.strip() == '' or messages2.strip() ==

輸入一個整數每一位分別列印

#define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h> #include<stdlib.h> void print(int n) { if (n>9) { print(n / 10); } printf("%

java Mysql的跨伺服器不同結構的聯合查詢不同伺服器上的不同查詢

由於業務的需要,需要從兩個資料庫中取得資料,伺服器A儲存有角色使用者配置表和角色表,伺服器B有使用者表和公司表。先不管架構為什麼要這樣設計資料表,因為確實有這樣的需求,但是這確實是一個令人頭疼的事情,但是還是要面帶微笑~ 解決思路一: 在資料庫中聯合不同資料庫的表中的DDL

點選標籤標籤內容插入到textarea文件

function insertAtCursor(myField, myValue) { if (document.selection) { myField.focus(); sel = document.selection.createRange(); sel.

隨機產生10個0-100之間的隨機數不重複的數存入到list最終結果輸出在控制檯上(2018-8-7)

package com.sj.zy; import java.util.ArrayList; import java.util.HashSet; import java.util.Set; public class Zy02 { public static void

mysql的load data,高速文本文件,插入數據

option 子句 取數據 跳過 expr 數據導入 文件名 所在 from 1語法 LOAD DATA [ LOW_PRIORITY | CONCURRENT ] [ LOCAL ] INFILE ‘file_name.txt‘ [ REPLACE | IGNORE

Java小題通過JNI調用本地C++共享的對應方法實現楊輝三角的繪制

question 文件夾 path ron variable iostream ring printf spl 1.在Eclipse中配置Javah,配置如下 位置是你javah.exe在你電腦磁盤上的路徑 位置:C:\Program Files\Java\jdk1.

(轉)mysql數據存儲數字字段時選擇int和varchar的區別

排序 mysql數據庫 SQ AR 設計 規則 使用 char 字段 從字段類型的執行效率上,int最高,varchar最低。狀態類型字段,使用char或者varchar是不可取的,int類型更容易建立索引和進行檢索,畢竟數字類型是數據庫檢索的基礎,char類型的畢竟需要經

從excel生成批量SQL,數據錄入到數據

導入 cat ont 光標 mage 導入數據庫 取數 .com IV excel表格中有許多數據,需要將數據導入數據庫中,又不能一個一個手工錄入,可以生成SQL,來批量操作。 1.首先在第二行的H列,插入函數:=CONCATENATE("INSERT IN

C# dataTable的linq聯合查詢插入到新的dataTable

[csharp]  view plain  copy //獲取要比對的資料