当前位置:网站首页>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(*)!
边栏推荐
- [MySQL] introduction, function, creation, view, deletion and modification of database view (with exercises)
- Lightroom import picture gray / Black rectangular multi display
- 2022.7.3-----leetcode. five hundred and fifty-six
- 分布式CAP理论
- 8. Factory method
- 2022年,或許是未來10年經濟最好的一年,2022年你畢業了嗎?畢業後是怎麼計劃的?
- QT get random color value and set label background color code
- C语言中的排序,实现从小到大的数字排序法
- Learning multi-level structural information for small organ segmentation
- Cloud native - SSH article that must be read on the cloud (commonly used for remote login to ECS)
猜你喜欢
[problem record] 03 connect to MySQL database prompt: 1040 too many connections
【MySQL】数据库视图的介绍、作用、创建、查看、删除和修改(附练习题)
Uniapp custom environment variables
双色球案例
SQL join, left join, right join usage
Arcpy 利用updatelayer函数改变图层的符号系统
[number theory] fast power (Euler power)
Common usage of time library
C language - Blue Bridge Cup - Snake filling
Matlab remainder
随机推荐
1、 Relevant theories and tools of network security penetration testing
[untitled]
11. Dimitt's law
What is Gibson's law?
Stc8h development (XII): I2C drive AT24C08, at24c32 series EEPROM storage
SQL injection SQL lab 11~22
The width of the picture in rich text used by wechat applet exceeds the problem
ORICO ORICO outdoor power experience, lightweight and portable, the most convenient office charging station
Tar source code analysis Part 2
[MySQL] introduction, function, creation, view, deletion and modification of database view (with exercises)
MySQL learning notes 3 - JDBC
Shopping malls, storerooms, flat display, user-defined maps can also be played like this!
746. Climb stairs with minimum cost
Tree DP
图的底部问题
Tar source code analysis 8
微信小程序使用rich-text中图片宽度超出问题
regular expression
Manually page the list (parameter list, current page, page size)
selenium IDE插件下载安装使用教程