当前位置:网站首页>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(*)!
边栏推荐
- ABCD four sequential execution methods, extended application
- tcp socket 的 recv 如何接收指定长度消息?
- [problem record] 03 connect to MySQL database prompt: 1040 too many connections
- Analysis of tars source code 5
- Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage
- Common JS tool Libraries
- SQL injection SQL lab 11~22
- 高薪程序员&面试题精讲系列119之Redis如何实现分布式锁?
- 【问题记录】03 连接MySQL数据库提示:1040 Too many connections
- Redis面试题集
猜你喜欢
期末周,我裂开
198. House raiding
uniapp 自定義環境變量
what the fuck! If you can't grab it, write it yourself. Use code to realize a Bing Dwen Dwen. It's so beautiful ~!
The solution of win11 taskbar right click without Task Manager - add win11 taskbar right click function
[MySQL] introduction, function, creation, view, deletion and modification of database view (with exercises)
双色球案例
SQL join, left join, right join usage
图的底部问题
C實現貪吃蛇小遊戲
随机推荐
How to choose the middle-aged crisis of the testing post? Stick to it or find another way out? See below
Overview of convolutional neural network structure optimization
Download kicad on Alibaba cloud image station
Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage
Reading notes of Clickhouse principle analysis and Application Practice (4)
740. Delete and get points
STC8H开发(十二): I2C驱动AT24C08,AT24C32系列EEPROM存储
Tar source code analysis Part 3
Analysis of tars source code 5
C语言中的排序,实现从小到大的数字排序法
Can the out of sequence message complete TCP three handshakes
Abap:ooalv realizes the function of adding, deleting, modifying and checking
Mysql 45讲学习笔记(七)行锁
List of top ten professional skills required for data science work
How does the recv of TCP socket receive messages of specified length?
2022年,或许是未来10年经济最好的一年,2022年你毕业了吗?毕业后是怎么计划的?
tars源码分析之4
Data analysis notes 09
C réaliser des jeux de serpents gourmands
Average two numbers