是否可以找出在MySQL / MariaDB中(不是)明确查询了哪些列?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了是否可以找出在MySQL / MariaDB中(不是)明确查询了哪些列?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1406字,纯文字阅读大概需要3分钟。
内容图文
![是否可以找出在MySQL / MariaDB中(不是)明确查询了哪些列?](/upload/InfoBanner/zyjiaocheng/887/f981c34b45014ff186c28e8a88f46b62.jpg)
我们有一个非常大,非常老的桌子,上面有几百列.其中一些列是历史记录,在任何编写客户端中均未使用.它们大多是空的(期望在很旧的记录中).我想清理数据库并摆脱某些表中未使用的旧列.
问题是所有访问此数据库的第三方客户端(只读).我不能指望所有提供商都会更新他们的客户.只要他们查询SELECT * …,就没有关系.但是我希望它们能显式查询(SELECT colA,colB等).从表中删除colA显然会导致客户端错误.
现在,我想知道任何查询语句都明确使用了哪些列,因此可以删除未使用的列.我想我可以使用查询日志,对其进行分析并找到明确使用的列,但是:
>每小时我们收到数百万个查询.
>有些客户可能每周一次访问我们的数据库,有些每秒访问一次.
这意味着查询日志必须在生产环境中运行数月,而且我不知道这是否/将对服务器或整体性能产生负面影响.
还有其他更可靠的解决方案吗?我对查询日志的担心是否夸大了?我希望MariaDB / MySQL将统计数据存储在某个地方,以显示列的使用情况,但是我找不到我需要的任何东西.
解决方法:
没有查询中提到哪些列的日志.
“一般日志”将每个查询复制到一个文件中.这可能是一个严重的磁盘占用(空间和速度),特别是对于“每小时数百万个查询”而言.但这将尝试答案…
我认为,一般日志可以通过pt-query-digest进行汇总.
另一种可能性是将tcpdump与pt-query-digest结合使用以获取所有查询.
摘要的优点是它将多个“相似”查询合并到一个条目中.您仍然必须手动(或有问题地)筛选输出.
大多数列都不值得删除,即使它们从未使用过.我建议重点关注最大的10%.可能有一种使用tcpdump的方法. egrep只查找那些列名.对此进行几次优化,您可能会发现一些主要候选对象要删除.
不幸的是,如果客户端执行SELECT *,则使用“所有”列.
内容总结
以上是互联网集市为您收集整理的是否可以找出在MySQL / MariaDB中(不是)明确查询了哪些列?全部内容,希望文章能够帮你解决是否可以找出在MySQL / MariaDB中(不是)明确查询了哪些列?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。