mysql not null 性能_如何使用NULL提高MySQL查询的性能?
下表中有几百万条记录:
CREATE TABLE `customers` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`store_id` int(10) unsigned DEFAULT NULL,
`first_name` varchar(64) DEFAULT NULL,
`middle_name` varchar(64) DEFAULT NULL,
`last_name` varchar(64) DEFAULT NULL,
`email` varchar(128) DEFAULT NULL,
`phone` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_store_email` (`store_id`,`email`),
KEY `index_store_phone` (`store_id`,`phone`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
查询#1大约需要800毫秒:
从“客户”的SELECT COUNT(*)中“ store_id” = 1;
查询#2大约需要1.5毫秒:
从`customers`中选择COUNT(*),其中`store_id` = 1并且`email`为NULL;
查询#3耗时5秒:
从`customers`中选择COUNT(*),其中`store_id` = 1并且`email`不为空;
笔记:
>我简化了表格以提出问题,但是查询是相同的.
>是的,我的桌子已经过优化.
>是,两个字段都已建立索引,请参见上面的create语法.
>只有几个store_id,但是每个记录都有一个.
>很少有客户将电子邮件设置为空.
我发现这里有些奇怪:
>查询#1最简单!只有几个可能的INT值.不应该最快吗?
>为什么查询3这么慢?通过执行其他两个查询,然后从#2中减去#1,我可以将时间减少一半,但我不必这样做.
对这个看似基本的问题有什么想法吗?感觉我缺少一些简单的东西.我在DB学校上过课吗?
mysql not null 性能_如何使用NULL提高MySQL查询的性能?相关推荐
- c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...
这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...
- mysql 2003报错_为什么不建议在 MySQL 中使用 UTF-8?
正文 记得去年我在往MySQL存入emoji表情 时,一直出错,无法导入.后来找到办法 -- 通过把 utf8 改成 utf8mb4 就可以了,并没有深究. 一年后,我看到一篇文章讲到emoji文字占 ...
- mysql 做回归模型_技术分享 | 我对 MySQL 隔离级别的剖析
隔离级别的产生 在串型执行的条件下,数据修改的顺序是固定的.可预期的结果,但是并发执行的情况下,数据的修改是不可预期的,也不固定,为了实现数据修改在并发执行的情况下得到一个固定.可预期的结果,由此产生 ...
- mysql数据库外连_数据库外连接及MySQL实现
MySQL查询分为内连接查询和外连接查询,他们的区别在于:内连接查询的两个表示对等关系,根据条件进行匹配:外连接是以某一个表为主,两一个表根据条件进行关联.外连接分为左外连接.右外连接和全外连接.本文 ...
- mysql静态化设计_网站静态化与mysql优化
一.伪静态 1.正则表达式的回顾 (1)要求取出练习的4个数字 (2)要求取出,形式为:xxx-yyy-xxx的数据 正则中几个概念: 子表达式:简单理解成用小括号括起的部分就是一个子表达式, 捕获: ...
- ubuntu安装mysql 密码忘了怎么办_在ubuntu上面安装mysql都密码忘记及一些常用命令...
重改密码! # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & ...
- c 对一个mysql数据库进行操作_用C语言操作MySQL数据库
函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换autocommit模式 ...
- mysql删除n行_订购记录并在MySQL中删除n行
让我们首先创建一个表-mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY ...
- mysql从dos界面_从DOS界面进入MYSQL数据库
新手学习数据库,从比较简单的mysql开始.从DOS界面进入mysql数据库其实跟配置java环境变量一样,要先设置环境变量(右击我的电脑-属性-高级-环境变量). 找到mysql的安装位置,把安装目 ...
最新文章
- 李彦宏候选中国工程院院士
- Windows Mobile 设备中心 for vista 一览
- Laravel Auth 自定义user 模型目录结构
- COOKIE伪造登录网站后台
- .NET Core 和 .NET Framework 之间的关系
- MySQL与Oracle主键冲突解决方式
- autojs toast 可以改变字体颜色吗_喃喃札记 | 你真的需要一部pad做笔记吗?
- hdu 杭电题目分类
- 中国数字血压计市场趋势报告、技术动态创新及市场预测
- 实战Citrix XenDesktop 5.5部署
- Eclipse中快速使代码对齐?1张图搞定!
- 乐视max2 刷入第三方recovery 然后刷入root 包 root
- 热烈祝贺 | 方正璞华喜获“数字贸易专委会年度示范单位”殊荣及“终身荣誉会长”单位
- 第一课print()输出函数(包含心形图案代码)
- IT“茫一代”转型记:创业维艰 苦乐皆有
- linux vnc登陆,vnc登陆,4个步骤教你vnc登陆Linux
- python爬取淘宝天猫评论(通过cookie)
- 推荐系统常用数据集介绍
- Hadoop是做什么的,hadoop集群搭建作用
- 主控是sm2259xt,求量产工具,固态硬盘是七彩虹sl500 250G的