下表中有几百万条记录:

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查询的性能?相关推荐

  1. c语言连接数据库例子,c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual help).doc...

    这是精心收集的精品经典资料,值得下载保存阅读! c语言操作mysql数据库小例子_互帮互助(C language MySQL database operation example _ mutual h ...

  2. mysql 2003报错_为什么不建议在 MySQL 中使用 UTF-8?

    正文 记得去年我在往MySQL存入emoji表情 时,一直出错,无法导入.后来找到办法 -- 通过把 utf8 改成 utf8mb4 就可以了,并没有深究. 一年后,我看到一篇文章讲到emoji文字占 ...

  3. mysql 做回归模型_技术分享 | 我对 MySQL 隔离级别的剖析

    隔离级别的产生 在串型执行的条件下,数据修改的顺序是固定的.可预期的结果,但是并发执行的情况下,数据的修改是不可预期的,也不固定,为了实现数据修改在并发执行的情况下得到一个固定.可预期的结果,由此产生 ...

  4. mysql数据库外连_数据库外连接及MySQL实现

    MySQL查询分为内连接查询和外连接查询,他们的区别在于:内连接查询的两个表示对等关系,根据条件进行匹配:外连接是以某一个表为主,两一个表根据条件进行关联.外连接分为左外连接.右外连接和全外连接.本文 ...

  5. mysql静态化设计_网站静态化与mysql优化

    一.伪静态 1.正则表达式的回顾 (1)要求取出练习的4个数字 (2)要求取出,形式为:xxx-yyy-xxx的数据 正则中几个概念: 子表达式:简单理解成用小括号括起的部分就是一个子表达式, 捕获: ...

  6. ubuntu安装mysql 密码忘了怎么办_在ubuntu上面安装mysql都密码忘记及一些常用命令...

    重改密码! # /etc/init.d/mysql stop # mysqld_safe --user=mysql --skip-grant-tables --skip-networking & ...

  7. c 对一个mysql数据库进行操作_用C语言操作MySQL数据库

    函数 描述 mysql_affected_rows() 返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. mysql_autocommit() 切换autocommit模式 ...

  8. mysql删除n行_订购记录并在MySQL中删除n行

    让我们首先创建一个表-mysql> create table DemoTable -> ( -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY ...

  9. mysql从dos界面_从DOS界面进入MYSQL数据库

    新手学习数据库,从比较简单的mysql开始.从DOS界面进入mysql数据库其实跟配置java环境变量一样,要先设置环境变量(右击我的电脑-属性-高级-环境变量). 找到mysql的安装位置,把安装目 ...

最新文章

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

热门文章

  1. 印度裔Kaggle大神自述:我是如何获得所有4个类别的Grandmaster
  2. 一个非常好用的 Python 魔法库
  3. 精度首超ResNet,港科大和CMU提出史上最强二值化网络ReActNet
  4. Keras vs PyTorch,哪一个更适合做深度学习?
  5. 鹅厂是如何使用 Git 的?
  6. 美团面试题:JVM 堆内存溢出后,其他线程是否可继续工作?
  7. 为什么阿里巴巴这一次能扛得起 11 亿的流量?
  8. 应用层网关调研与基础测试
  9. Python源码学习:多线程实现机制
  10. Linux之用户相关操作