眾所周知,在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
複製代碼 代碼如下: 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` =
SHOW STATUS 直接在命令列下登陸MySQL運行SHOW STATUS;查詢語句,詳細如下圖 同樣的語句還有SHOW VARIABLES;,SHOW STATUS是查看MySQL運行情況,和上面那種通過pma查看到的資訊基本類似。 SHOW VARIABLES SHOW VARIABLES是查看MySQL的配置參數,還可以使用類似SHOW VARIABLES LIKE 'Key%' SHOW PROCESSLIST SHOW
項目需要就在現有的伺服器上面重新安裝了個mysql伺服器,還挺費勁兒呢,因為之前都是在我的筆記本上面實驗的,它的系統是Ubuntu的,什麼路徑啊,啟動方式啊。都不一樣所以這次還是讓我糾結了一把:下面把我安裝過程中遇到的問題給傳上來,首先rpm格式安裝就不多說了,主要是mysql的設定檔在:/etc/my.cnf這裡,需要修改:複製代碼 代碼如下:[mysqld]datadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.sock# Default to
select * from table limit m,n其中m是指記錄開始的index,從0開始,n是指從第m條開始,取n條。複製代碼 代碼如下:mysql(root@localhost:test)>select * from total;+----+-----------------+--------+------------+| id | name |
此處我們給int char沒有給出他們的寬度,系統預設會給它分配一個寬度。M指示最大顯示寬度。最大有效顯示寬度是255。顯示寬度與儲存大小或類型包含的值的範圍無關我們來進行下實驗複製代碼 代碼如下:mysql(root@localhost:test 03:19:00)>create table c (-> id int not null,-> name char not null);Query OK, 0 rows affected (0.25