当前位置:网站首页>MySQL 45 lecture learning notes (XIV) count (*)
MySQL 45 lecture learning notes (XIV) count (*)
2022-07-04 06:38:00 【Tom Kong】
One .count(*) How to implement
Different MySQL engine ,count(*) There are different implementations
- MyISAM The engine stores the total row number of a table on disk , So execute count(*) It will return this number directly , It's very efficient ;
- InnoDB The engine needs to read it line by line from the engine and count it up
If you add where Conditions ,MyISAM Tables can't return so fast
Two . Why? InnoDB Not put MyISAM Save the data ?
Even in Multiple queries at the same time , because Multi version concurrency control (MVVC),InnoDB Table should How many lines back I'm not sure .
- InnoDB It's the index organization table , Primary key index tree Leaf nodes are data , And ordinary index tree Leaf nodes are primary key values .
- Ordinary index tree Than Primary key index tree Many small , Yes count(*) This kind of operation , Traverse the index tree The results are the same .
MySQL Optimizer Will find the smallest tree to traverse .
On the premise that the logic is correct , Minimize the amount of data scanned , This is database system design One of the general rules of
3、 ... and .show table status
show table status command Number of lines displayed also Can't be used directly .
Four . Database summary
- MyISAM surface although count(*) Soon , however Unsupported transaction ;
- show table status command Although it returns quickly , But it's not accurate ;
- InnoDB The table directly count(*) Will traverse the entire table , Although the results are accurate , But it will Cause performance problems .
5、 ... and . Cache system save count
One . Design thinking :
- Every row inserted in this table Redis Add one to the count
- The count is reduced by one for each Deleted Row
- In this case , Read and update operations are fast
The cache system may lose updates
- A row has just been inserted into the data table ,Redis The value saved in is also added with a line , then Redis Abnormal restart , Restart from the stored redis Read the value back in the place of the data , Just add one and you will lose .
Solution :
- Redis After abnormal restart , Go to the database and execute it alone count(*) Gets the actual number of rows , Then write the value back to Redis Li will do
In a concurrent system , We are Unable to accurately control the execution time of different threads , Whether it's Write cache first and then database still Write the database first and then the cache There is no guarantee of absolute accuracy .
6、 ... and .count(*)、count( Primary key id)、count( Field ) and count(1) And so on
- about count( Primary key id) Come on ,InnoDB The engine traverses the whole table , Put each line id out ,server Layer space determination .
- about count(1) Come on ,.server Layer for returning InnoDB The engine traverses the entire table , But every line that does not take value , Put a number “1” go in , Judgment cannot be empty , Add by line .
count(1) Perform better than count( Primary key id) fast . Because back from the engine id It's going to involve parsing the data lines , as well as Copy field values The operation of
about count( Field ) Come on :
- If this “ Field ” Is defined as not null Words , Read the field line by line from the record , Judgment cannot be null, Add by line ;
- If this “ Field ” The definition is allowed to be null, So when it comes to execution , To judge that it might be null, We need to take out the value and judge again , No null Just add up .
That's the first principle ,server What fields does the layer want ,InnoDB What fields are returned .
count(*) Specially optimized
count( Field )<count( Primary key id)<count(1)==count(*)
recommend count(*)!
边栏推荐
- tars源码分析之9
- 2022 is probably the best year for the economy in the next 10 years. Did you graduate in 2022? What is the plan after graduation?
- Bicolor case
- selenium驱动IE常见问题解决Message: Currently focused window has been closed.
- Arcpy uses the updatelayer function to change the symbol system of the layer
- Code rant: from hard coding to configurable, rule engine, low code DSL complexity clock
- 740. Delete and get points
- Tar source code analysis Part 2
- [backpack DP] backpack problem
- How does the inner roll break?
猜你喜欢
How to realize multi account login of video platform members
Overview of convolutional neural network structure optimization
[MySQL] introduction, function, creation, view, deletion and modification of database view (with exercises)
C # symmetric encryption (AES encryption) ciphertext results generated each time, different ideas, code sharing
How to avoid JVM memory leakage?
R统计绘图-随机森林分类分析及物种丰度差异检验组合图
C实现贪吃蛇小游戏
Matlab remainder
树形dp
颈椎、脚气
随机推荐
C réaliser des jeux de serpents gourmands
How to choose the middle-aged crisis of the testing post? Stick to it or find another way out? See below
【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
centos8安装mysql.7 无法开机启动
2022 where to find enterprise e-mail and which is the security of enterprise e-mail system?
Appium foundation - appium installation (II)
Cloud native - SSH article that must be read on the cloud (commonly used for remote login to ECS)
图的底部问题
Mysql 45讲学习笔记(十三)表数据删掉一半,表文件大小不变
Tar source code analysis Part 3
双色球案例
What is tweeman's law?
Arcpy uses the updatelayer function to change the symbol system of the layer
selenium IDE插件下载安装使用教程
Summary of leetcode BFS question brushing
分布式CAP理论
C realize Snake games
Explain in one sentence what social proof is
Reading notes of Clickhouse principle analysis and Application Practice (4)
STM32 单片机ADC 电压计算