当前位置: 当前位置:首页 > 综合 > mysql查看表内容命令正文

mysql查看表内容命令

作者:探索 来源:知识 浏览: 【大 中 小】 发布时间:2026-10-17 06:23:25 评论数:

连上MySQL之后,看表第一件事往往是内容看看库里有什么表,表里又存了什么。命令`SELECT * FROM 表名;` 这条命令谁都会敲,看表但真正用好它的内容人不多。我见过太多人上来就是命令一句 `SELECT *`,然后被几十万行数据糊了一脸,看表终端刷了半分钟还没停。内容

先说你最常用的命令场景:只想瞄一眼前几行。别傻乎乎地 `SELECT *` 完事,看表加上 `LIMIT`。内容比如 `SELECT * FROM users LIMIT 10;`,命令这样只返回前10条记录,看表屏幕不炸,内容眼睛也不累。命令如果你想知道表里到底有多少行,`SELECT COUNT(*) FROM users;` 更直接。不过大表上跑 `COUNT(*)` 会慢得让你想砸键盘,InnoDB 引擎尤其如此,它得一行行数。

有人会问,那我想看表结构怎么办?`DESC 表名;` 或者 `SHOW COLUMNS FROM 表名;` 都行。前者输出更紧凑,后者信息更全,包括默认值、额外属性这些。我习惯用 `DESC`,敲起来快。`SHOW CREATE TABLE 表名;` 则能把建表语句完整还原出来,排查字符集、引擎类型的时候特别管用。

说个真实的坑。有次同事在线上库执行 `SELECT * FROM orders WHERE status = 'pending';`,结果卡了十几秒。原因很简单,status 字段没索引,全表扫描。后来加了个索引,同样的查询降到毫秒级。所以查看表内容之前,先 `EXPLAIN` 一下你的查询语句,看看有没有走索引。`EXPLAIN SELECT * FROM orders WHERE status = 'pending';` 会告诉你 type 是不是 ALL,key 是不是 NULL。type 是 ALL 就意味着全表扫,数据量一大就完蛋。

还有个细节:`SELECT *` 本身就有问题。如果表有十几列,你只想要其中两三列,写清楚列名比通配符好。网络传输少了,内存占用也小。更关键的是,如果表结构改了,比如加了个 TEXT 大字段,`SELECT *` 会把那个大字段也拖出来,白白浪费带宽。我现在的习惯是,永远不写 `SELECT *`,除非是在本地临时看一下小表。

排序和过滤也是查看内容时的常客。`SELECT id, name FROM users ORDER BY created_at DESC LIMIT 5;` 能拿到最新注册的五个用户。注意 `ORDER BY` 后面跟的字段最好有索引,不然 MySQL 得把整张表读出来再排序,临时文件一开,磁盘 IO 就上去了。`WHERE` 条件里避免对字段做函数操作,比如 `WHERE DATE(created_at) = '2024-01-01'` 会让索引失效,改成 `WHERE created_at >= '2024-01-01' AND created_at < '2024-01-02'` 才行。

有时候你只想看某个字段的去重值。`SELECT DISTINCT city FROM users;` 可以,但数据量大时 DISTINCT 也很慢。更快的办法是 `SELECT city FROM users GROUP BY city;`,效果一样,执行计划可能不同。我实测过一张两百万行的表,DISTINCT 用了 3.2 秒,GROUP BY 用了 1.8 秒,差距不小。

最后提一嘴分页。`LIMIT 100000, 20` 这种写法,MySQL 会先读前 100020 行,再扔掉前 100000 行。越翻到后面越慢。优化方法是记住上一页的最大 id:`SELECT * FROM users WHERE id > 100000 LIMIT 20;`。前提是 id 有序且连续,不连续也没关系,用 `WHERE id > 上一页最后一个id` 就行。

查看表内容看着简单,但写对、写快,需要你对索引、执行计划、数据量都有感觉。别怕麻烦,多敲几次 `EXPLAIN`,比事后加索引省事得多。