【技术累积】【点】【sql】【15】MySQL的TEXT和SELECT问题
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了【技术累积】【点】【sql】【15】MySQL的TEXT和SELECT问题,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2495字,纯文字阅读大概需要4分钟。
内容图文
说明
只是TEXT和SELECT两个东西相关的问题,并不是两者之间的关系。
TEXT
TEXT类型,大文本类型,细分起来还有BIGTEXT,TINYTEXT等;
总体而言,就是处理mysql中存储大文本的一种数据类型。
先上结论:慎用,少用,即使用也要限制好,控制性能。
Innodb的存储结构
- 从大到小是:表空间-段-区-页/块-行
- 磁盘管理的最小单位是页;
- 数据存放是按行来存放的,即存储引擎是面向行的;
- 页的大小固定为16kb,且不能更改;
由于innodb存储引擎表为索引组织表,树底层的叶子节点为一双向链表,因此每个页中至少应该有两行记录,这就决定了innodb在存储一行数据的时候不能够超过8k(8098字节)
TEXT和BLOB
使用这种大数据类型,如果值比较大,InnoDB会使用专门的“外部”存储区域来进行存储;
行内仅使用1-4个字节存储一个指针。
取用的时候同理,会创建临时表;
若临时表太大,超过设定值,则会存储在磁盘上,性能会有较大下降;
SELECT打印输出
SELECT something
可以作为mysql的输出语句,遇到问题可以去查看下;
下面说下遇到的问题:
问题描述
SELECT id,interaction_type,reply_type
FROM chat_log
WHERE status=0
AND interaction_type IN ('a')
AND reply_type IN ('c' OR 'd')
在条件中,in的括号中,错误的把,写成了OR;
正常运行中,发现查出的结果并不是想要的;
跟踪之后,发现mybatis没有报错,但是sql中确实写成了or;
问题解决和探究
解决很简单,就改成,即可
SELECT id,interaction_type,reply_type
FROM chat_log
WHERE status=0
AND interaction_type IN ('a')
AND reply_type IN ('c' , 'd')
但为什么之前的写法可以运行呢?
用select看下条件
SELECT ('c' OR 'd')
//结果为0
有了or,尝试下and
SELECT ('c' AND 'd')
//结果为0
有了String,尝试下其他的
SELECT ('c' AND 1) //结果为0
SELECT ('0' AND '1') //结果为0
SELECT (0 OR '1') //结果为1
可以初步判定,条件中是一个表达式,且是逻辑运算的/位运算的;
下面就又有问题了,原来有问题的语句其实等价于
SELECT id,interaction_type,reply_type
FROM chat_log
WHERE status=0
AND interaction_type IN ('a')
AND reply_type IN (0)
ORDER BY created_date DESC
SELECT id,interaction_type,reply_type
FROM chat_log
WHERE status=0
AND interaction_type IN ('a')
AND reply_type = 0
ORDER BY created_date DESC
运行之后,结果表明一致。
改成1,尝试下,发现什么都查不出来;
改成FALSE,尝试结果表明,和0一样;
改写语句
SELECT COUNT(*)
FROM chat_log
WHERE reply_type = FALSE
会得到全表数据量,true则为空
初步猜测结论:
- varchar 是否为true,是看varchar是否为bit类型
但具体是为啥,还是没搞清楚,希望各位大佬指点
参考文章
- 高性能mysql之慎用BLOB与TEXT
- innodb使用大字段text,blob的一些优化建议
- InnoDB的表类型,逻辑存储结构,物理存储结构
- MySQL innoDB索引底层原理详解
- mysql里的打印(输出)是那个命令,就是相当于mssql里的print
- SQL的类型转换
- sql语句中,要提取数据表中某一字段数值为True的数据。
内容总结
以上是互联网集市为您收集整理的【技术累积】【点】【sql】【15】MySQL的TEXT和SELECT问题全部内容,希望文章能够帮你解决【技术累积】【点】【sql】【15】MySQL的TEXT和SELECT问题所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。