Mysql資料庫最佳化方法小結

一、資料庫設計  適度的反範式,注意是適度的  我們都知道三範式,基於三範式建立的模型是最有效儲存數 據的方式,也是最容易擴充的模式。我們在開發應用程式時,設計的資料庫要最大程度的遵守三範式,特別是對於OLTP型的系統,三範式是必須遵守的規則。當 然,三範式最大的問題在於查詢時通常需要join很多表,導致查詢效率很低。所以有時候基於效能考慮,我們需要有意的違反三範式,適度的做冗餘,以達到提 高查詢效率的目的。注意這裡的反範式是適度的,必須為這種做法提供充分的理由。下面就是一個糟糕的執行個體:  

mysql擷取隨機資料問題總結

1.order by rand()資料多了極慢,隨機性非常好,適合非常小資料量的情況。   代碼如下複製代碼 SELECT * FROM table_name AS r1 JOIN (SELECT (ROUND(RAND() * (SELECT ABS(MAX(id)-MIN(id)-$limit) FROM table_name))+(SELECT MIN(id) from table_name)) AS id) AS r2 WHERE r1.id >= r2

mysql(AUTO_INCREMENT)自增ID的起始值修改與設定

通常的設定自增欄位的方法:建立表格時添加:create table table1(id int auto_increment primary key,...)建立表格後添加:alter table table1 add id int auto_increment primary key 自增欄位,一定要設定為primary key.例許多時候希望table中資料的id不要從1開始,像qq, id從10000開始代碼如下:  代碼如下複製代碼 alter table users

mysql擷取自增id方法總結

方法一,  代碼如下複製代碼 SELECT TABLE_ROWS FROM information_schema.tables WHERE table_name='game' AND table_schema = DATABASE(); 在php中用法php程式碼範例  代碼如下複製代碼 <?php$sql="show table status where name

MYSQL錯誤:Out of memory (Needed 1046596 bytes)

MYSQL記憶體設定問題,可調整tmp_table_size大小解決增大query_cache_limit 的值。 還有max_heap_table_size 和tmp_table_size的值。 因為我們的預存程序中用了好多的預先處理語句。而且語句的結果都是非常大的。 起初我的結果:  代碼如下複製代碼 mysql> show variables like 'max_heap_table_size'; +---------------------------------

mysql 取隨機資料慢最佳化方法

MySQL很多時候需要擷取隨機資料,舉個例子,要從tablename表中隨機提取一條記錄,大家一般的寫法就是:   代碼如下複製代碼 SELECT * FROM tablename ORDER BY RAND() LIMIT 1 但是,後來我查了一下MYSQL的官方手冊,裡面針對RAND()的提示大概意思就是,在ORDER BY從句裡面不能使用RAND()函數,因為這樣會導致資料列被多次掃描。但是在MYSQL 3.23版本中,仍然可以通過ORDER BY RAND(

mysql擷取字串長度函數(CHAR_LENGTH)

length:   是計算欄位的長度一個漢字是算三個字元,一個數字或字母算一個字元CHAR_LENGTH(str) 傳回值為字串str 的長度,長度的單位為字元。一個多位元組字元算作一個單字元。對於一個包含五個二位元組字元集, LENGTH()傳回值為 10,而CHAR_LENGTH()的傳回值為5。CHARACTER_LENGTH(str) CHARACTER_LENGTH()是CHAR_LENGTH()的同義字。BIT_LENGTH(str)

MySQL查詢字串中包含字元的記錄

REGEXP例1.查詢欄位中包含非英文的資料  代碼如下複製代碼 SELECT *FROM `m_user`WHERE `emp_no`REGEXP '[^ -~]' =1 列2.這樣能把所有不含英文的都搞出來  代碼如下複製代碼 SELECT *FROM tableWHERE nameNOT REGEXP '[a-zA-Z0-9]+'

MySQL使用INSERT SELECT 批量插入資料

使用Insert Select語句插入記錄時,必須遵循以下原則。用Select語句選擇資料時,不能從被插入資料的表中選擇行。指定插入的表後所包含的欄位數目必須與Select語句中返回的欄位數目相同。指定插入的表後所包含的欄位資料類型必須與Select語句中返回的欄位資料類型相同或系統可以自動轉換。   代碼如下複製代碼 INSERT INTO ler_items( classid, title, address, zipcode )SELECT classid,

MySql按日期尋找sql語句詳解

使用DATE_FORMAT方法SELECT * FROM `ler_items` WHERE DATE_FORMAT(postTime,'%Y-%m')='2013-03'注意:日期一定要用'',否則沒有效果其它的一些關於mysql日期尋找語句mysql> select date_format(DATE_SUB(CURDATE(), INTERVAL 7

mysql中sum float類型出現小數點解決方案

方法一:最好的辦法是將float欄位改為decimal(16,6)。具體方法:可設定一個臨時欄位,結合MySQL的關鍵字binary進行準確複製等。方法二:使用binary關鍵字解決。具體操作為“select sum(binary 欄位名(float類型))”    BINARY不是函數,是類型轉換運算子,它用來強制它後面的字串為一個二進位字串例子:  代碼如下複製代碼    

MySQL下varchar類型最大長度是多少

1、限制規則欄位的限制在欄位定義的時候有以下規則: a)  儲存限制varchar 欄位是將實際內容單獨儲存在聚簇索引之外,內容開頭用1到2個位元組表示實際長度(長度超過255時需要2個位元組),因此最大長度不能超過65535。b)  編碼長度限制字元類型若為gbk,每個字元最多佔2個位元組,最大長度不能超過32766;字元類型若為utf8,每個字元最多佔3個位元組,最大長度不能超過21845。若定義的時候超過上述限制,則varchar欄位會被強行轉為text類型,

mysql中INSERT IGNORE 與INSERT INTO,REPLACE INTO的區別

mysql中常用的三種插入資料的語句:insert into表示插入資料,資料庫會檢查主鍵,如果出現重複會報錯; replace into表示插入替換資料,需求表中有PrimaryKey,或者unique索引,如果資料庫已經存在資料,則用新資料替換,如果沒有資料效果則和insert into一樣; insert ignore表示,如果中已經存在相同的記錄,則忽略當前新資料;下面通過代碼說明之間的區別,如下:create table testtb( id int not null primary

mysql limit 分頁最佳化詳解

實現分頁,我們一般會使用 select * from table   where id >100  limit   a,b   ,  當分頁過大時,如達到一萬頁,此時 a =十萬 ,b=10,   雖然此處使用到了索引(不用索引情況會更加糟糕),但是通過索引檢索後還是需要回表去取 十萬零一十條資料  然後丟掉前十萬條,

LINUX伺服器下開啟MYSQL遠端連線許可權

於安全考慮root賬戶一般只能本地訪問,但是在開發過程中可能需要開啟root的遠端存取許可權。下面是基本的步驟: 1、登入到mysql中,為root進行遠端存取的授權,執行下面的命令:1.1、改表法:可能是你的帳號不允許從遠程登陸,只能在localhost。這個時候只要在localhost的那台電腦,登入mysql後,更改 “mysql” 資料庫裡的 “user” 表裡的 “host”

MySQL無法重啟提示Warning: World-writable config file

今天幫朋友維護伺服器,在關閉資料庫的命令發現mysql關不了,提示Warning: World-writable config file ‘/etc/my.cnf’ is ignored ,大概意思是許可權全域可寫,任何一個使用者都可以寫。mysql擔心這種檔案被其他使用者惡意修改,所以忽略掉這個設定檔。這樣mysql無法關閉。下面看下整個過程重啟MySQL  代碼如下複製代碼 [root@ttlsa ~]# service mysqld stop

MySQL不能通過localhost或127.0.0.1串連資料庫

MySQL通過localhost無法串連資料庫的解決問題:一台伺服器的PHP程式通過localhost地址無法串連資料庫,但是如果設定為127.0.0.1則可以正常串連,串連其他資料庫伺服器也正常。MySQL的使用權限設定正確,且通過mysql命令列用戶端可以正常串連資料庫。分析:這是典型的socket沒有正確設定的情況。串連MySQL資料庫有兩種方式:TCP/IP(一般理解的連接埠的那種)和Unix通訊端(一般叫socket或者sock)。大部分情況下,可以用localhost代表本機127.

Mysql中如何尋找並重複資料刪除資料

考試系統中做了一個使用者匯入試題功能,導致使用者匯入了很多重複的試題,我需要查詢及刪除一下重複的記錄,於是有了這篇文章。(一)單個欄位1、尋找表中多餘的重複記錄,根據(question_title)欄位來判斷  代碼如下複製代碼 select * from questions where question_title in (select question_title from people group by question_title having

如何開啟Mysql的慢查詢

為了啟用它,需要在MySQL的配置選項檔案(my.cnf)中這樣設定:  代碼如下複製代碼 [mysqld]log-slow-queries 這樣會預設將超過10秒的查詢記錄到MySQL資料目錄中的記錄檔example.com-slow.log中去。你可以具體修改秒數以及日誌的儲存位置,如下面的代碼所示,這裡我們將緩慢查詢的最小值設為5秒:  代碼如下複製代碼 # The MySQL server[mysqld]long_query_time = 5log-

DirectAdmin面板中MariaDB代替MySQL配置步驟

DirectAdmin 是目前比較常見而且也有許多主機商正在使用的控制台,廉價、簡單、易用 目前 Custombuild 甚至已經提供 lampn 的環境了,但是 MySQL 的效率仍然是飽受詬病。我也是自用的 DirectAdmin 控制台,在我安裝的時候就已經是避免了安裝 MySQL,為此、各位和我一樣的童鞋可以按照如下的方式安裝 MariaDB。一、源先加入官方源  代碼如下複製代碼 vim /etc/yum.repos.d/MariaDB.repo

總頁數: 2483 1 .... 1518 1519 1520 1521 1522 .... 2483 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.