当前位置:网站首页>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(*)!
边栏推荐
- Wechat applet scroll view component scrollable view area
- [backpack DP] backpack problem
- tars源码分析之6
- 4G wireless all network solar hydrological equipment power monitoring system bms110
- Learning multi-level structural information for small organ segmentation
- 2022年,或许是未来10年经济最好的一年,2022年你毕业了吗?毕业后是怎么计划的?
- [number theory] fast power (Euler power)
- ABAP:OOALV实现增删改查功能
- 198. House raiding
- C réaliser des jeux de serpents gourmands
猜你喜欢
selenium驱动IE常见问题解决Message: Currently focused window has been closed.
QT get random color value and set label background color code
24 magicaccessorimpl can access the debugging of all methods
Wechat applet scroll view component scrollable view area
740. Delete and get points
Mysql 45讲学习笔记(七)行锁
【问题记录】03 连接MySQL数据库提示:1040 Too many connections
R统计绘图-随机森林分类分析及物种丰度差异检验组合图
[March 3, 2019] MAC starts redis
Distributed cap theory
随机推荐
期末周,我裂开
2022, peut - être la meilleure année économique de la prochaine décennie, avez - vous obtenu votre diplôme en 2022? Comment est - ce prévu après la remise des diplômes?
What is the sheji principle?
17-18. Dependency scope and life cycle plug-ins
tars源码分析之6
uniapp 自定義環境變量
Arcpy 利用updatelayer函数改变图层的符号系统
Can the out of sequence message complete TCP three handshakes
Mysql 45讲学习笔记(十一)字符串字段怎么加索引
740. Delete and get points
2022 wechat enterprise mailbox login entry introduction, how to open and register enterprise wechat enterprise mailbox?
tars源码分析之10
Wechat applet scroll view component scrollable view area
STM32 单片机ADC 电压计算
List of top ten professional skills required for data science work
Option (024) - do all objects have prototypes?
STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
How to realize multi account login of video platform members
雲原生——上雲必讀之SSH篇(常用於遠程登錄雲服務器)
tars源码分析之7