眾所周知,在MySQL中,如果直接 ORDER BY RAND() 的話,效率非常差,因為會多次執行。事實上,如果等值查詢也是用 RAND() 的話也如此,我們先來看看下面這幾個SQL的不同執行計畫和執行耗時。首先,看下建表DDL,這是一個沒有顯式自增主鍵的InnoDB表:[yejr@imysql]> show create table t_innodb_random\G*************************** 1. row *************************
通常,我們會採用ORDER BY LIMIT start, offset 的方式來進行分頁查詢。例如下面這個SQL:SELECT * FROM `t1` WHERE ftype=1 ORDER BY id DESC LIMIT 100, 10;或者像下面這個不帶任何條件的分頁SQL:SELECT * FROM `t1` ORDER BY id DESC LIMIT 100, 10;一般而言,分頁SQL的耗時隨著 start
前幾天幫同事解決一個案例,在主從複製環境下,從庫上的MySQL版本號碼是5.5.5,遇到下面的錯誤:#其他非相關資訊我都隱藏掉了 [(yejr@imysql.com)]> show slave status \G; Slave_IO_Running: Yes Slave_SQL_Running: No Last_Errno: 1064 Last_Error: Error 'You have an error in your SQL syntax; check the manual
複製代碼 代碼如下: SELECT a.`TABLE_SCHEMA` AS DB_NAME , a.`TABLE_NAME` , a.`TABLE_ROWS` ,a.`ENGINE` -- , a.* FROM information_schema.`TABLES` a LEFT JOIN information_schema.`TABLE_CONSTRAINTS` b ON a.`TABLE_NAME` = b.`TABLE_NAME` AND a.`TABLE_SCHEMA` =
mysql 建立資料庫時指定編碼很重要,很多開發人員都使用了預設編碼,亂碼問題可是防不勝防。制定資料庫的編碼可以很大程度上避免倒入匯出帶來的亂碼問題。 網頁資料一般採用UTF8編碼,而資料庫預設為latin 。我們可以通過修改資料庫預設編碼方式為UTF8來減少資料庫建立時的設定,也能最大限度的避免因粗心造成的亂碼問題。我們遵循的標準是,資料庫,表,欄位和頁面或文本的編碼要統一起來 我們可以通過命令查看資料庫當前編碼: mysql> SHOW VARIABLES LIKE
SHOW STATUS 直接在命令列下登陸MySQL運行SHOW STATUS;查詢語句,詳細如下圖 同樣的語句還有SHOW VARIABLES;,SHOW STATUS是查看MySQL運行情況,和上面那種通過pma查看到的資訊基本類似。 SHOW VARIABLES SHOW VARIABLES是查看MySQL的配置參數,還可以使用類似SHOW VARIABLES LIKE 'Key%' SHOW PROCESSLIST SHOW