CREATE TABLE `appstat_day_prototype_201305` ( `day_key` date NOT NULL DEFAULT '1900-01-01', `appkey` varchar(20) NOT NULL DEFAULT '', `user_total` bigint(20) NOT NULL DEFAULT '0', `user_activity` bigint(20) NOT NULL DEFAULT '0', `times_total` bigint(20) NOT NULL DEFAULT '0', `times_activity` bigint(20) NOT NULL DEFAULT '0', `incr_login_daily` bigint(20) NOT NULL DEFAULT '0', `unbind_total` bigint(20) NOT NULL DEFAULT '0', `unbind_activitys` bigint(20) NOT NULL DEFAULT '0', PRIMARY KEY (`appkey`,`day_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 mysql> explain SELECT * from appstat_day_prototype_201305 where appkey = xxxxx and day_key between '2013-05-23' and '2013-05-30';+----+-------------+------------------------------+------+---------------+------+---------+------+----------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------------------------+------+---------------+------+---------+------+----------+-------------+ | 1 | SIMPLE | appstat_day_prototype_201305 | ALL | PRIMARY | NULL | NULL | NULL | 19285787 | Using where | +----+-------------+------------------------------+------+---------------+------+---------+------+----------+-------------+ 1 row in set (0.00 sec) mysql> explain SELECT * from appstat_day_prototype_201305 where appkey = 'xxxxx' and day_key between '2013-05-23' and '2013-05-30';+----+-------------+------------------------------+-------+---------------+---------+---------+------+------+-------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+------------------------------+-------+---------------+---------+---------+------+------+-------------+ | 1 | SIMPLE | appstat_day_prototype_201305 | range | PRIMARY | PRIMARY | 65 | NULL | 1 | Using where | +----+-------------+------------------------------+-------+---------------+---------+---------+------+------+-------------+ 1 row in set (0.00 sec)
从上面可以很明显的看到由于appkey是varchar,而在where条件中不加'',会引发全表查询,加了就可以用到索引,这扫描的行数可是天差地别,对于服务器的压力和响应时间自然也是天差地别的。
虽然poll_id的类型为bigint,但是SQL中添加了'',但是这个语句仍然用到了索引,虽然扫描行数也不少,但是能用到索引就是好SQL。
那么一个小小的''为什么会有这么大的影响呢?根本原因是因为MySQL在对文本类型和数字类型进行比较的时候会进行隐式的类型转换。以下是5.5官方手册的说明……
根据以上的说明,当where条件之后的值的类型和表结构不一致的时候,MySQL会做隐式的类型转换,都将其转换为浮点数在比较。
对于第一种情况:
比如where string = 1;
需要将索引中的字符串转换成浮点数,但是由于'1',' 1','1a'都会比转化成1,故MySQL无法使用索引只能进行全表扫描,故造成了慢查询的产生。
相关推荐
综上所述,MySQL中`INT`转`VARCHAR`可能导致的慢查询主要是由于索引失效和隐式类型转换造成的。通过保持数据类型一致性、显式转换、优化查询结构和语句,以及监控性能,可以有效避免这类问题,提升数据库性能。
在上篇文章给大家讲了MySQL数据库中把int转化varchar引发的慢查询,本文给大家介绍Mysql数据库中把varchar类型转化为int类型的方法,一起看看吧! mysql为我们提供了两个类型转换函数:CAST和CONVERT,现成的东西...
这涉及到字段类型、约束、索引等的映射,例如,MySQL的`ENUM`类型在PostgreSQL中可能需要转换为`VARCHAR`或`INT`。 2. **触发器创建**:由于PostgreSQL不支持`ON UPDATE`自动更新时间戳,`MysqlToPostgresUtil`会...
MySQL存储过程,一键批量修改一个表内的多个列(字段)类型。例如从int转换成varchar
如果VARCHAR字段的定义长度超过了上述限制,MySQL会将其自动转换为TEXT类型,此时每个字段占用的定义长度不再是根据内容长度变化,而是固定为11字节,但这已经不再是VARCHAR的行为。 在MySQL 4.0及更低版本中,...
### Oracle的表结构转成MySQL的表结构 #### 功能概述 本文介绍了一种将Oracle数据库中的表结构转换为MySQL数据库表结构的方法。通过编写一个PL/SQL函数`fnc_table_to_mysql`来实现这一目标。该函数可以接受四个参数...
在SQL Server中,数据类型的转换是一项常见...总的来说,正确地将varchar转换为int进行排序是保证数据正确性和查询效率的关键步骤,而理解并灵活运用各种排序方法和技巧,对于提升SQL查询性能和满足业务需求至关重要。
当需要将整型(如`INT`)转换为字符串类型(如`VARCHAR`)时,可以使用`CONCAT`函数来实现这一目标。 ```sql -- 示例:将整数8转换为字符串'80' SELECT CONCAT(8, '0'); ``` 或者将数字转换为`CHAR`类型: ``...
从 SQL Server 数据库到 MySQL 数据库转换操作指南 在实际开发和数据分析中,数据库的选择和转换是非常常见的操作。随着业务的发展和技术的演进,数据库的选择和转换也变得越来越复杂。因此,本文将指导您从 SQL ...
总结一下,MySQL中的`VARCHAR`类型求和可以通过`SUM()`函数(适用于简单场景)、`CAST()`或`CONVERT()`函数(适用于更复杂的数值转换)来实现。理解并熟练运用这些函数,能够帮助你在遇到类似问题时,有效地进行数据...
这些技术通常提供API接口,将数据库查询结果转化为JSON格式,供前端渲染。 总的来说,递归查询菜单树是数据库操作的一个常见应用场景,它涉及到数据库设计、SQL查询技巧以及前后端的数据交换。理解并掌握这些知识点...
1. **数据类型映射**:SQLite和MySQL的数据类型不尽相同,需要理解两者之间的映射规则,例如SQLite的`TEXT`可能对应MySQL的`VARCHAR`,`INTEGER PRIMARY KEY`对应`INT AUTO_INCREMENT`等。 2. **SQL语法差异**:...
将Int 转为varchar经常用 concat函数,比如concat(8,’0′) 得到字符串 ’80’ 2、Cast函数;CONVERT函数。 用法:CAST(expr AS type), CONVERT(expr,type) , CONVERT(expr USING transcoding_name). SELECT ...
MySQL数据库在设计表结构时,选择正确的存储字段类型对于查询效率和存储空间的优化至关重要。以下是对标题和描述中提到的知识点的详细说明: 1. **整数类型**: - 整数类型包括TINYINT、SMALLINT、MEDIUMINT、INT...
### MySQL到Oracle数据库转换的关键知识点 #### 一、MySQL到Oracle数据库转换的总体流程 **1. 分表结构及表数据两次导出** - **原因**:由于MySQL与Oracle数据库之间的语法差异较大,一次性导出后直接进行转换...
在MySQL中实现中文汉字转拼音的功能,主要是为了方便在数据库查询和数据分析时处理中文文本,尤其是在没有全文索引或者需要进行复杂模糊匹配时。以下是一个简单的实现方法,它利用自定义函数来完成这一任务。 首先...
例如,MySQL中的VARCHAR对应QT的QString,INT对应int,图片通常存储为BLOB类型,可以存储二进制数据,如JPEG或PNG格式的图像。 6. **图片处理**:在QT中,QImage和QPixmap类用于处理图像数据。将图片保存到数据库前...
MySQL 到 Oracle 数据库转换指南 在实际项目中,我们经常会遇到从 MySQL 转换到 Oracle 数据库的情况。这两种数据库有很多具体的应用不同,导致我们需要手动转换数据库结构和数据。本文将详细介绍从 MySQL 转换到 ...