表统计信息是数据库基于成本的优化器最重要的参考信息;统计信息不准确,优化器可能给出不够优化的执行计划或者是错误的执行计划。对统计信息的计算分为非持久化统计信息(实时计算)与持久化统计信息。
成都创新互联专业为企业提供月湖网站建设、月湖做网站、月湖网站设计、月湖网站制作等企业网站建设、网页设计与制作、月湖企业网站模板建站服务,10年月湖做网站经验,不只是建网站,更提供有价值的思路和整体网络服务。
非持久化统计信息
统计信息没有保存在磁盘上,而是频繁的实时计算统计信息;
每次对表的访问都会重新计算其统计信息;
假设针对一张大表的频繁查询,那么每次都要重新计算统计信息,很耗费资源。
持久化统计信息
把一张表在某一时刻的统计信息值保存在磁盘上;
避免每次查询时重新计算;
如果表更新不是很频繁,或者没有达到 MySQL 必须重新计算统计信息的临界值,可直接从磁盘上获取;
即使 MySQL 服务重启,也可以快速的获取统计信息值;
统计信息的持久化可以针对全局设置也可以针对单表设置。
接下来,详细说 MySQL 统计信息如何计算,何时计算,效果评估等问题。在 MySQL Server 层来控制是否自动计算统计信息的分布,并且来决策是持久化还是非持久化。
命令行下用 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;比如我们为branch这个表插入数据。
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
方法二,通过系统表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