mysql 内存表 速度_mysql查询速度。为什么用内存表查询tmp表比直接选择慢?
我有点困惑这种MySQL行为。
一个带有ORDER BY子句的查询将创建tmp表(如show profile所示),并且运行速度更快,即使没有order with with的相同查询也不会创建tmp table。为什么?为什么“排序”出现在配置文件输出中,而没有ORDER BY存在?
所以,从一开始。
我有关于amazon m1.small实例的mysql5.1。
我有4个表格,如:
CREATE TABLE `meetings_m` (
`id` int(11) unsigned NOT NULL DEFAULT '0',
`name` varchar(255) DEFAULT NULL,
`address1` varchar(255) DEFAULT NULL,
`address2` varchar(255) DEFAULT NULL,
`city` varchar(255) DEFAULT NULL,
`state` varchar(50) DEFAULT NULL,
`zip` varchar(255) DEFAULT NULL,
`country` varchar(255) DEFAULT NULL,
`latitude` double NOT NULL,
`longitude` double NOT NULL,
`user_id` int(11) unsigned NOT NULL,
`image_url` varchar(250) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=MEMORY DEFAULT CHARSET=latin1
CREATE TABLE `meeting_times_m` (
`id` int(11) unsigned NOT NULL DEFAULT '0',
`meeting_id` int(11) unsigned NOT NULL,
`day` varchar(255) NOT NULL,
`time` time NOT NULL,
`name` varchar(50) NOT NULL,
`format` varchar(255) DEFAULT NULL,
`notes` varchar(255) NOT NULL,
`program` varchar(255) NOT NULL,
`cancelled` varchar(10) NOT NULL DEFAULT 'False',
PRIMARY KEY (`id`),
KEY `meeting_id` (`meeting_id`),
KEY `program` (`program`)
) ENGINE=MEMORY DEFAULT CHARSET=latin1
CREATE TABLE `real_meeting_tags_m` (
`id` int(10) unsigned NOT NULL DEFAULT '0',
`meeting_id` int(10) unsigned NOT NULL,
`tag_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `meeting_id` (`meeting_id`),
KEY `tag_id` (`tag_id`)
) ENGINE=MEMORY DEFAULT CHARSET=latin1
CREATE TABLE `tags_m` (
`id` int(11) unsigned NOT NULL DEFAULT '0',
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MEMORY DEFAULT CHARSET=latin1=========================
现在我跑了
SELECT SQL_CALC_FOUND_ROWS
Meeting.*,
3959.87*acos(sin(radians(37.7858))*sin(radians(latitude))+cos(radians(37.7858))*cos(radians(latitude))*cos(radians(-122.406-longitude))) as distance,
count(`MeetingTag`.`id`) as tag_count,
group_concat(distinct Tag.name) as tags,
group_concat(distinct Tag.id) as tag_ids
FROM
`meetings_m` AS `Meeting`
LEFT JOIN `meeting_times_m` AS `MeetingTime` ON (`MeetingTime`.`meeting_id` = `Meeting`.`id`)
INNER JOIN `real_meeting_tags_m` AS `MeetingTag` ON (`MeetingTag`.`meeting_id`=`Meeting`.`id` AND (`MeetingTag`.`tag_id` in (9,8,16,14,4,2,5,15,11,7,10,13,3,6)))
LEFT JOIN `tags_m` AS `Tag` ON (`MeetingTag`.`tag_id` = `Tag`.`id`)
WHERE
3959.87*acos(sin(radians(37.7858))*sin(radians(latitude))+cos(radians(37.7858))*cos(radians(latitude))*cos(radians(-122.406-longitude))) <= '204.0'
AND `MeetingTime`.`program` = ('AA') AND ((`Meeting`.`name` LIKE 'AA%') OR (`MeetingTime`.`program` LIKE 'AA%'))
GROUP BY
`MeetingTag`.`meeting_id`
ORDER BY `distance` ASC
LIMIT 22此查询运行36秒,其配置文件为
| Status | Duration |
+--------------------------------+----------+
| starting | 0.000027 |
| checking query cache for query | 0.000217 |
| checking permissions | 0.000005 |
| checking permissions | 0.000002 |
| checking permissions | 0.000003 |
| checking permissions | 0.000005 |
| Opening tables | 0.000019 |
| System lock | 0.000004 |
| Table lock | 0.000059 |
| init | 0.000075 |
| optimizing | 0.000030 |
| statistics | 0.000081 |
| preparing | 0.000035 |
| Creating tmp table | 0.000059 |
| executing | 0.000004 |
| Copying to tmp table | 0.352465 |
| Creating sort index | 0.001807 |
| Copying to group table | 0.005540 |
| Sorting result | 0.000776 |
| Sending data | 0.002716 |
| end | 0.000006 |
| removing tmp table | 0.000009 |
| end | 0.000003 |
| removing tmp table | 0.000425 |
| end | 0.000007 |
| query end | 0.000004 |
| freeing items | 0.000020 |
| removing tmp table | 0.000005 |
| freeing items | 0.000005 |
| removing tmp table | 0.000004 |
| freeing items | 0.000526 |
| storing result in query cache | 0.000010 |
| logging slow query | 0.000003 |
| cleaning up | 0.002318 |复制到tmp表时0.35秒。
解释是
+----+-------------+-------------+--------+--------------------+------------+---------+----------------------------------+------+----------------------------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+--------+--------------------+------------+---------+----------------------------------+------+----------------------------------------------+
| 1 | SIMPLE | MeetingTime | ref | meeting_id,program | program | 257 | const | 7129 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | MeetingTag | ref | meeting_id,tag_id | meeting_id | 4 | stepsaway.MeetingTime.meeting_id | 2 | Using where |
| 1 | SIMPLE | Tag | eq_ref | PRIMARY | PRIMARY | 4 | stepsaway.MeetingTag.tag_id | 1 | |
| 1 | SIMPLE | Meeting | eq_ref | PRIMARY,name | PRIMARY | 4 | stepsaway.MeetingTag.meeting_id | 1 | Using where |
+----+-------------+-------------+--------+--------------------+------------+---------+----------------------------------+------+----------------------------------------------+所以我想要更快地查询。所以我认为跳过tmp表格会有所帮助。阅读完一些人后,我将group by从MeetingTag.meeting_id更改为MeetingTime.meeting_id(因为它们相同)并删除了order by子句
现在查询是
SELECT SQL_CALC_FOUND_ROWS
Meeting.*,
3959.87*acos(sin(radians(37.7858))*sin(radians(latitude))+cos(radians(37.7858))*cos(radians(latitude))*cos(radians(-122.406-longitude))) as distance,
count(`MeetingTag`.`id`) as tag_count,
group_concat(distinct Tag.name) as tags,
group_concat(distinct Tag.id) as tag_ids
FROM
`meetings_m` AS `Meeting`
LEFT JOIN `meeting_times_m` AS `MeetingTime` ON (`MeetingTime`.`meeting_id` = `Meeting`.`id`)
INNER JOIN `real_meeting_tags_m` AS `MeetingTag` ON (`MeetingTag`.`meeting_id`=`Meeting`.`id` AND (`MeetingTag`.`tag_id` in (9,8,16,14,4,2,5,15,11,7,10,13,3,6)))
LEFT JOIN `tags_m` AS `Tag` ON (`MeetingTag`.`tag_id` = `Tag`.`id`)
WHERE
3959.87*acos(sin(radians(37.7858))*sin(radians(latitude))+cos(radians(37.7858))*cos(radians(latitude))*cos(radians(-122.406-longitude))) <= '204.0'
AND `MeetingTime`.`program` = ('AA') AND ((`Meeting`.`name` LIKE 'AA%') OR (`MeetingTime`.`program` LIKE 'AA%'))
GROUP BY
`MeetingTime`.`meeting_id`
LIMIT 22解释是
+----+-------------+-------------+--------+--------------------+------------+---------+----------------------------------+------+-----------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------------+--------+--------------------+------------+---------+----------------------------------+------+-----------------------------+
| 1 | SIMPLE | MeetingTime | ref | meeting_id,program | program | 257 | const | 7129 | Using where; Using filesort |
| 1 | SIMPLE | MeetingTag | ref | meeting_id,tag_id | meeting_id | 4 | stepsaway.MeetingTime.meeting_id | 2 | Using where |
| 1 | SIMPLE | Tag | eq_ref | PRIMARY | PRIMARY | 4 | stepsaway.MeetingTag.tag_id | 1 | |
| 1 | SIMPLE | Meeting | eq_ref | PRIMARY,name | PRIMARY | 4 | stepsaway.MeetingTag.meeting_id | 1 | Using where |
+----+-------------+-------------+--------+--------------------+------------+---------+----------------------------------+------+-----------------------------+执行时间为42秒。
个人资料是
+--------------------------------+----------+
| Status | Duration |
+--------------------------------+----------+
| starting | 0.000026 |
| checking query cache for query | 0.000211 |
| checking permissions | 0.000005 |
| checking permissions | 0.000003 |
| checking permissions | 0.000003 |
| checking permissions | 0.000005 |
| Opening tables | 0.000019 |
| System lock | 0.000003 |
| Table lock | 0.000058 |
| init | 0.000075 |
| optimizing | 0.000031 |
| statistics | 0.000082 |
| preparing | 0.000036 |
| executing | 0.000051 |
| Sorting result | 0.145705 |
| Sending data | 0.271131 |
| end | 0.000016 |
| removing tmp table | 0.000008 |
| end | 0.000006 |
| removing tmp table | 0.000004 |
| end | 0.000007 |
| query end | 0.000004 |
| freeing items | 0.000619 |
| storing result in query cache | 0.000010 |
| logging slow query | 0.000003 |
| cleaning up | 0.000006 |
+--------------------------------+----------+排序结果和发送数据比创建tmp表格花费的时间更长!但为什么???
我正在使用MEMORY表..为什么需要这么长时间?为什么它会分类?我删除条款的顺序
mysql 内存表 速度_mysql查询速度。为什么用内存表查询tmp表比直接选择慢?相关推荐
- mysql 强制不走缓存_MySQL - 强制不使用缓存来测试查询速度
我正在测试MySQL中一些查询的速度. 数据库正在缓存这些查询,这使我在测试这些查询的速度时难以获得可靠的结果. 有没有办法禁用查询缓存? 系统:Linux上的MySQL 4虚拟主机,我可以访问PHP ...
- mysql 排序速度_MySQL排序速度慢而且可能不稳定
一.具体现象 有一个功能,按照算法得出的权重值,分页展示一批列表数据,权重值越大越靠前.研发同学反馈查询速度慢且排序不稳定. 排序不稳定的具体现象,有不少记录存在相同权重值,某条记录(假设id=100 ...
- mysql 修复表字段_mysql数据库总结一【安装,配置,表操作,字段操作,增删改, 备份-恢复,select查询】...
服务器端安装 安装服务器端:在终端中输入如下命令,回车后,然后按照提示输入 sudo apt-get install mysql-server 启动服务 sudo service mysql star ...
- mysql 大分页查询优化_Mysql骚操作:优化大分页查询
背景 系统结构如上图.经过排查是因为系统B拉取数据时间太长导致的推送超时. 系统B拉取数据的方法是根据_tiemstamp(数据操作时间)分页查询系统A的接口,即: 1SELECT 字段名2FROM ...
- 讲mysql执行流程书籍_MySQL 基础架构 1. 一条SQL查询语句的执行过程(个人学习笔记)...
MySQL的逻辑架构图: MySQL 大体分为 "server 层" 和 "存储引擎层" 两部分: Server 层 包括 连接器.查询缓存.分析器.优化器.执 ...
- mysql 两个数据库指定表同步_mysql从2个数据库中同步两个表
我无法相信你没有找到合适的脚本来做到这一点.根据服务器到服务器的带宽和连接以及表数据大小,您可以: >直接转移整个表: mysqldump [options] sourcedatabase ta ...
- sql数据表改为自动递增显示与其他表关联_MySQL萌新第一季 第四话-数据表的基本操作...
本话旨在完成以下内容: 在数据库中,数据表是数据库中最重要和基本的操作对象,是数据存储的基本单位.换句话说我们操作数据库其实重要的就是操作数据表.本章将详细介绍数据表的基本操作,主要内容包括:创建数据 ...
- mysql经典总结文章_MySQL基础篇(01):经典实用查询案例,总结整理
MySQL基础篇(01):经典实用查询案例,总结整理 发布时间:2020-02-26 22:25:21 来源:51CTO 阅读:244 作者:知了一笑 本文源码:GitHub·点这里 || GitEE ...
- mysql 数据记录导出_mysql如何导出600万条记录的数据表?
目前我这么写: /** * Created by IntelliJ IDEA. * User: felix * Date: 2019-03-01 * Time: 18:49 */ set_time_l ...
- mysql 关注 表设计_mysql - 新浪微博中的关注功能是如何设计表结构的?
问 题 新浪微博中,假如a关注了200个用户,300个用户关注了a,点解的时候会看到所有关注a或者a关注的用户,这种表结构是如何实现的? 解决方案 个人简单猜测,如有雷同,纯属巧合!有错误请指正! u ...
最新文章
- 初学python-字符串中引号的使用、input简介、强制类型转换、加减乘除简写、条件判断...
- springboot事物注解不生效_SpringBoot攻略三、配置文件说明
- JLink接口的SWD接法
- WINCE 加入驱动DLL步骤
- git push/pull时总需要输入用户名密码的解决方案
- TCP/IP的初步理解,TCP和UDP的区别
- dosbox详细安装级及使用
- Rhino结合AD、keyshot进行建模和渲染
- 下行文格式图片_通知的格式及范文图片_通知格式 通知的格式及范文
- 弘辽科技:直通车引流逻辑。
- 学习日记 | 云计算 - 服务模型 - 三层架构(深度学习)
- android studio 连接夜神模拟器
- Arduino LED闪烁
- 怎么将多张图片打印在一张A4纸上?
- 一键将苹果实况照片livp转jpg的简单方法
- react 实现渐变色背景样式
- 《死亡搁浅》:在“联结”的世界里,是 “个人”在游戏中
- 【C++】STL容器之string使用(赋值、拼接、查找、替换、比较、截取、插入、删除、子串)
- 联想y7000电脑未正确启动_Lenovo/联想 拯救者 Y7000简单装系统教程
- 用结构体练习 考生信息录入
热门文章
- python爬虫要安装什么_python爬虫之分布式爬虫和部署
- 【毕业答辩】毕业论文答辩自诉如何写?
- python实现app自动签到器_Python实现自动签到脚本代码示例
- bypass最新版d盾mysql_Bypass D盾_IIS防火墙SQL注入防御(多姿势)
- C++面试题-面向对象-构造函数和析构函数
- Halcon PDF文档(extension_package_programmers_manual)学习总结
- 最近对焦距离与最大放大倍率
- Windows提升进程权限
- 一次磁盘满的系统故障
- 智慧城市发展路径中 中国特色是主色调