当前位置:网站首页>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源码分析之10
- What is tweeman's law?
- 2022年,或许是未来10年经济最好的一年,2022年你毕业了吗?毕业后是怎么计划的?
- ADC voltage calculation of STM32 single chip microcomputer
- Dimension and format of data
- R statistical mapping - random forest classification analysis and species abundance difference test combination diagram
- Considerations for testing a website
- Modify TCP timestamp to optimize transmission performance
- C realize Snake games
- 2022 wechat enterprise mailbox login entry introduction, how to open and register enterprise wechat enterprise mailbox?
猜你喜欢

uniapp 自定义环境变量

Arcpy 利用updatelayer函数改变图层的符号系统

ABAP:OOALV实现增删改查功能

R统计绘图-随机森林分类分析及物种丰度差异检验组合图

After the festival, a large number of people change careers. Is it still time to be 30? Listen to the experience of the past people

QT qtablewidget table column top requirements ideas and codes

Google Chrome Portable Google Chrome browser portable version official website download method

QT get random color value and set label background color code

双色球案例

selenium IDE插件下载安装使用教程
随机推荐
Wechat applet scroll view component scrollable view area
期末周,我裂开
SQL join, left join, right join usage
Fundamentals of SQL database operation
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?
Bicolor case
Tree DP
C realize Snake games
手动对list进行分页(参数list ,当前页,页面大小)
Lightroom import picture gray / Black rectangular multi display
tars源码分析之10
How does the inner roll break?
tars源码分析之1
selenium IDE插件下载安装使用教程
tars源码分析之6
运算符<< >>傻瓜式测试用例
Reading notes of Clickhouse principle analysis and Application Practice (4)
C实现贪吃蛇小游戏
leetcode825. 适龄的朋友
2022 wechat enterprise mailbox login entry introduction, how to open and register enterprise wechat enterprise mailbox?