一.前言 这个问题是今天朋友提出来的,关于查询一个1200w的数据表的总行数,用count(*)的速度一直提不上去.找了很多优化方案,最后另辟蹊径,选择了用explain来获取总行数. 二.关于count的优化 网上关于count()优化的有很多.博主这边的思路就是没索引的就建立索引关系,然后使用count(1)或者count(*)来提升速度.这两个函数默认使用的是数据表中最短的那个索引字段.我朋友这边因为表中只有一个索引字段,所以使用count(1)和count(*)没什么区别. MySQL中…
当需要对表进行ddl操作如加索引.增删列时,数据量小时直接在线修改表结构影响不大当表达到百万.千万数据就不能直接在线修改表结构 下面是具体的过程:1.备份数据select * from ih_order into outfile '/bak/order.txt';mysql> select * from ih_order into outfile 'D:/bak/order.txt';Query OK, 10001000 rows affected (1 min 30.18 sec) 2.复制原…
当需要对表进行ddl操作如加索引.增删列时,数据量小时直接在线修改表结构影响不大当表达到百万.千万数据就不能直接在线修改表结构 下面是具体的过程:1.备份数据select * from ih_order into outfile '/bak/order.txt';mysql> select * from ih_order into outfile 'D:/bak/order.txt';Query OK, 10001000 rows affected (1 min 30.18 sec) 2.复制原…
Sql server:(连接数据库后,点击当前数据库再新建查询) select count(c.name),o.name from syscolumns c left join sysobjects o on c.id=o.id group by o.name MySql: select count(t.table_name),c.table_name from information_schema.columns c left join INFORMATION_SCHEMA.TABLES t…
insert into pntmall_point_detail(PNTMALL_PNT_ID,PNTMALL_PNT_DT,PNTMALL_VALIDITY,PNTMALL_LASTUPDATEDT, PNTMALL_RPTPNT_ID,PNTMALL_HAIERUID, PNTMALL_OPTYPE_ID,PNTMALL_OPTYPE_DESC, PNTMALL_NUM,PNTMALL_EXPDT,HPT_REDEMPT_POINT, HPT_LEFT_POINT,HPT_FULLREDEM…
今天公司两个远端的数据库主从同步有点问题,查看下wordpress库下所有表的表的条目? mysql> use information_schema;Database changedmysql> select table_name,table_rows from tables where TABLE_SCHEMA = 'wordpress'order by table_rows desc;+-----------------------+------------+| table_name |…
CREATE TABLE #RowCounts(NumberOfRows BIGINT,TableName VARCHAR(128)) EXEC sp_MSForEachTable 'INSERT INTO #RowCounts SELECT COUNT_BIG(*) AS NumberOfRows, ''?'' as TableName FROM ?' SELECT TableName,NumberOfRowsFROM #RowCounts ORDER BY NumberOfRows DESC…
本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使百万级.千万级数据表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果).希望读者能够理解SQL的执行过程,并根据过程优化,走上自己的"成金之路"   需要优化的查询:使用explain      出现了Using temporary:      有分页时出现了Using filesort则表示使用不了索引,需要根据下面的技巧来调整语句      rows过多,或者几乎是全表的记…
一:Count(*) 的实现方式? - 要明确的是,在不同的 MySQL 引擎中,count(*) 有不同的实现方式. - MyISAM 引擎把一个表的总行数存在了磁盘上,因此执行 count(*) 的时候会直接返回这个数,效率很高(前提是不加where条件). - 而 InnoDB 引擎就麻烦了,它执行 count(*) 的时候,需要把数据一行一行地从引擎里面读出来,然后累积计数. 二: 为什么 InnoDB 不跟 MyISAM 一样,也把数字存起来呢? - 因为即使是在同一个时刻的多个查询,…
查询执行的基础 当希望MySQL能够以更高的性能运行查询时,最好的办法就是弄清楚MySQL是如何优化和执行查询的.MySQL执行一个查询的过程,根据图1-1,我们可以看到当向MySQL发送一个请求时,MySQL都做了什么: 图1-1   查询执行路径 客户端发送一条查询给服务器. 服务器先检查查询缓存,如果命中了缓存,则立即返回存储在缓存中的结果.否则进入下一阶段. 服务器端进行SQL解析.预处理,再由优化器生成对应的执行计划. MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询…