表統(tǒng)計信息是數據庫基于成本的優(yōu)化器最重要的參考信息;統(tǒng)計信息不準確,優(yōu)化器可能給出不夠優(yōu)化的執(zhí)行計劃或者是錯誤的執(zhí)行計劃。對統(tǒng)計信息的計算分為非持久化統(tǒng)計信息(實時計算)與持久化統(tǒng)計信息。
成都創(chuàng)新互聯專業(yè)為企業(yè)提供月湖網站建設、月湖做網站、月湖網站設計、月湖網站制作等企業(yè)網站建設、網頁設計與制作、月湖企業(yè)網站模板建站服務,10年月湖做網站經驗,不只是建網站,更提供有價值的思路和整體網絡服務。
非持久化統(tǒng)計信息
統(tǒng)計信息沒有保存在磁盤上,而是頻繁的實時計算統(tǒng)計信息;
每次對表的訪問都會重新計算其統(tǒng)計信息;
假設針對一張大表的頻繁查詢,那么每次都要重新計算統(tǒng)計信息,很耗費資源。
持久化統(tǒng)計信息
把一張表在某一時刻的統(tǒng)計信息值保存在磁盤上;
避免每次查詢時重新計算;
如果表更新不是很頻繁,或者沒有達到 MySQL 必須重新計算統(tǒng)計信息的臨界值,可直接從磁盤上獲?。?/p>
即使 MySQL 服務重啟,也可以快速的獲取統(tǒng)計信息值;
統(tǒng)計信息的持久化可以針對全局設置也可以針對單表設置。
接下來,詳細說 MySQL 統(tǒng)計信息如何計算,何時計算,效果評估等問題。在 MySQL Server 層來控制是否自動計算統(tǒng)計信息的分布,并且來決策是持久化還是非持久化。
命令行下用 show columns from [table]
會得到如 xx rows in set (0.00 sec)
或者:
$sql="select * from article where 0";
$result = mysql_query($sql);
echo mysql_num_fields($result);
再或者:
desc [table]
1、打開終端窗口,登錄mysql。mysql -uroot -p。
2、SHOW DATABASES;USE testdb;這個時候切換到相應的數據庫。
3、SHOW TABLES;INSERT INTO branch VALUES(6, 'BB', NULL, NULL);SELECT * FROM branch;比如我們?yōu)閎ranch這個表插入數據。
4、SELECT employee.emp_id, employee.first_name, branch.branch_nameFROM employee JOIN branch ON employee.emp_id = branch.mgr_id;這個時候進行一下數據的聯合,用JOIN。
方法一,在程序中直接desc?tablename,然后總行數就是字段數。
mysql?desc?ysks;
+-------+---------------+-----
|?Field?|?Type??????????|?Null
+-------+---------------+-----
|?單號??|?int(11)???????|?YES
|?金額??|?decimal(10,2)?|?YES
|?已收??|?decimal(10,2)?|?YES
|?日期??|?bigint(20)????|?YES
|?名稱??|?varchar(10)???|?YES
|?余額??|?decimal(10,2)?|?YES
|?備注??|?varchar(10)???|?YES
|?品名??|?varchar(10)???|?YES
+-------+---------------+-----
8?rows?in?set?(0.06?sec)
mysql?select?FOUND_ROWS();
+--------------+
|?FOUND_ROWS()?|
+--------------+
|????????????8?|
+--------------+
1?row?in?set?(0.06?sec)
mysql
方法二,通過系統(tǒng)表information_schema.`COLUMNS`?(?mysql5以上版本支持)。
mysql?select?count(*)?from?information_schema.`COLUMNS`
-?where?TABLE_SCHEMA='csdn'
-?and?TABLE_NAME='ysks';
+----------+
|?count(*)?|
+----------+
|????????8?|
+----------+
1?row?in?set?(0.06?sec)
mysql
你這多個主鍵的話就是求合集了
SELECT TOP 100 * FROM TABLE WHERE A=2 AND B=10