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的安装位置,把安装目 ...
最新文章
- 进程间通信(IPC)学习
- mlflow_使用MLflow跟踪进行超参数调整
- 27、简述redis的有哪几种持久化策略及比较?
- 华为正加大全球招聘 包括芯片工程师、软件开发员和AI研究员
- 微软亚洲研究院 (MSRA) 的实习体验如何?
- C语言教学模式 教学方法改革,C语言教学模式改革探究.docx
- 【HTML+CSS之小米商城页面图】
- 进入3.0时代,紫光云致力做好数字化转型的底座
- 全网最全关闭小米手机MIUI系统广告教程
- 百信计算机管理员登录账号密码,192.168.0.1管理员密码是多少 管理员密码一般是啥...
- 【HDOJ】1022 Train Problem I_天涯浪子_新浪博客
- 程序员毕业3年 如何 面试互联网高级开发(附简历模板)
- 为用户提供质量好,服务好,运作成本低的云计算产品—记新睿云服务团队顺利完成春节保障任务...
- 想对大一大二学生说一些心里话
- 麒麟V10双网卡绑定测试
- 全志哪吒D1-H Tina Linux Ubuntu 22.04入门踩坑日记
- 【Python beautiful soup】如何用beautiful soup 解析HTML内容
- 网易126邮箱服务器设置,网易闪电邮企业邮箱设置教程(POP3)
- 使用迅雷下载百度云上文件
- “文件管理”学习提纲