欧美v成 人在线观看_成人在线视频中文字幕_六月激情综合网_成人夜片_欧美日本中文_日韩精品视频免费_69亚洲精品久久久蜜桃_亚洲性色成人av天堂_亚洲 日韩 国产欧美 另类_成人国产精品156免费观看_男人的天堂在线a无码_欧美性站_成人免费看黄_无马在线_国产精选av_av熟女人妻一区二区三区_日韩乱码人妻无码中文字幕视频_日本黄页网站免费大全_国产精品videossex久久发布_免费av看

當前位置:主頁 > 聚焦 > 正文
Mysql高級5-SQL優化
來源:博客園作者:洞察網2023-07-31 06:41:19
一、插入數據優化  1.1 批量插入

如果有多條數據需要同時插入,不要每次插入一條,然后分多次插入,因為每執行一次插入的操作,都要進行數據庫的連接,多個操作就會連接多次,而一次批量操作只需要連接1次

1.2 手動提交事務

因為Mysql默認每執行一次操作,就會提交一次事務,這樣就會涉及到頻繁的事務的開啟與關閉

start transaction;  insert into 表名 values(),(),();  insert into 表名 values(),(),();  insert into 表名 values(),(),();commit;
1.3 主鍵順序插入

主鍵一般是默認自增的,但是也可以手動增加,這里不建議手動亂序增加,而是使用默認的順序增加,原因會在后面解釋。


(資料圖片僅供參考)

1.4 大批量插入數據

如果一次性需要插入大批量數據,使用insert語句插入性能較低,此時可以使用Mysql數據庫提供的load指令進行插入,

首先在連接數據庫的時候需要加上 --local-infile 參數

mysql --local-infile -u root -p

在使用本地文件加載功能的時候,需要先查看本地加載文件選項是否開啟的

mysql> select @@local_infile;+----------------+| @@local_infile |+----------------+|              0 |+----------------+1 row in set (0.00 sec)

說明1:0表示本地加載文件并未開啟

開啟本地加載文件的語句

mysql> set global local_infile = 1;Query OK, 0 rows affected (0.01 sec)mysql> select @@local_infile;+----------------+| @@local_infile |+----------------+|              1 |+----------------+1 row in set (0.00 sec)

創建一個空表tb_user,其表結構如下

mysql> desc tb_user;+----------+-------------+------+-----+---------+----------------+| Field    | Type        | Null | Key | Default | Extra          |+----------+-------------+------+-----+---------+----------------+| id       | int         | NO   | PRI | NULL    | auto_increment || username | varchar(50) | NO   | UNI | NULL    |                || password | varchar(50) | NO   |     | NULL    |                || name     | varchar(20) | NO   |     | NULL    |                || birthday | date        | YES  |     | NULL    |                || sex      | char(1)     | YES  |     | NULL    |                |+----------+-------------+------+-----+---------+----------------+6 rows in set (0.01 sec)

使用load加載本地文件 "tb_user_data.sql" 內容到新創建的表中,其中tb_user_data.sql中的測試數據如下

houlei@houleideMacBook-Pro Desktop %cat tb_user_data.sql1,a,aa,aaa,2023-07-01,12,b,bb,bbb,2023-07-02,03,c,cc,ccc,2023-07-03,14,d,dd,ddd,2023-07-04,05,e,ee,eee,2023-07-05,16,f,ff,fff,2023-07-06,07,g,gg,ggg,2023-07-07,1houlei@houleideMacBook-Pro Desktop % 

使用load加載本地文件 "tb_user_data.sql" 內容到新創建的表中  

mysql> load data local infile "/Users/houlei/Desktop/tb_user_data.sql" into table tb_user fields terminated by "," lines terminated by "\n";Query OK, 7 rows affected (0.01 sec)Records: 7  Deleted: 0  Skipped: 0  Warnings: 0

說明1: load data local infile 是加載本地文件的意思,

說明2:"/Users/houlei/Desktop/tb_user_data.sql"是文件路徑

說明3:into table tb_user 是將文件中的數據,插入到tb_user表中

說明4:fields terminated by "," 是說每個字段之間的數據是使用","分割的

說明5:lines terminated by "\n" 是說每一行之間的數據使用的是‘\n’分割的

說明6:本方法只是舉例,在實際運用大數據量插入時100萬條數據的插入至少要數分鐘,如果使用load方法只需要十幾秒

二、主鍵優化  2.1 數據組織方式

在InnoDB儲存引擎中,表數據都是根據主鍵順序組織存放的,這種存儲方式的表稱為索引組織表(index organized table)IOT

說明1:在索引的B+數中所有的數據保存在葉子節點上,非葉子節點只保存主鍵key的值

說明2:索引中的各個節點都是保存在邏輯結構頁上面的,一頁默認大小16K

2.2 頁分裂

頁可以為空,也可以填充一半,也可以填充100%,每個頁包含了2至N行數據,根據主鍵排列

情況1:主鍵順序插入

說明1:row是行數據,每一頁上可以存放多個行數據?!   ?/p>

情況2:主鍵亂序插入

說明1:當我們想要在插入一個id=50的數據時,會發生頁分裂

說明2:這時會將 1#page頁里面的數據超過 50%的數據,移動到新開辟的 3#page頁中

說明3:然后將 id=50的數據也拼接到 3#page頁中

說明4:這時就會出現一個問題,3#page中的索引比 2#page頁中的索引小,所以還需要將 3#page頁前置,這就叫頁分裂

2.3 頁合并

當刪除一行記錄時,實際上記錄并沒有被物理刪除,只是記錄被標記(flaged)為刪除并且它的空間變得允許被其他記錄聲明使用

當頁中刪除的記錄達到 merge_threshold(默認為頁的50%),InnoDB 會開始尋找最靠近的頁(前或者后)看看是否可以合并以優化空間使用

說明1:這時在 2#page刪除了13,14,15,16數據后,該頁空余空間超過50%時就會尋找前一頁或者后一頁,是否同樣有不滿足50%,可以合并的

說明2:這時 1#page頁是滿的,不能合并,3#page頁不滿可以合并,所以 3#page頁遷移到 2#page頁中

說明3:這時如果在有數據20插入就可以直接插入到3#page頁上了,這就是頁合并。

2.4 主鍵設計原則滿足業務需求的情況下,盡量減低主鍵的長度。插入數據時,盡量選擇順序插入,選擇使用auto_incerment自增主鍵,盡量不要用uuid作主鍵或者其他自然主鍵如身份證號,因為這個值是無需的,會存在頁分裂情況。三、order by優化  3.1 Using filesort

通過表的索引或者全表掃描,讀取滿足條件的數據行,然后在排序緩沖區sort buffer 中完成排序操作,所有不是通過索引直接返回排序結果的排序都叫FileSort排序

3.2 Using index

通過有序索引順序掃描直接返回有序數據,這種情況即為using index,不需要額外的排序,操作效率高,即排序的列表字段符合覆蓋索引。

3.3 案例

emp表結構:

mysql> desc emp;+-----------+-------------+------+-----+---------+----------------+| Field     | Type        | Null | Key | Default | Extra          |+-----------+-------------+------+-----+---------+----------------+| id        | int         | NO   | PRI | NULL    | auto_increment || name      | varchar(20) | YES  |     | NULL    |                || age       | int         | YES  |     | NULL    |                || job       | varchar(20) | YES  |     | NULL    |                || salary    | int         | YES  |     | NULL    |                || entrydate | date        | YES  |     | NULL    |                || managerid | int         | YES  |     | NULL    |                || dept_id   | int         | YES  | MUL | NULL    |                |+-----------+-------------+------+-----+---------+----------------+8 rows in set (0.01 sec)

emp表中索引情況

mysql>show index from emp;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| emp   |          0 | PRIMARY  |            1 | id          | A         |           7 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       || emp   |          1 | fk_dept  |            1 | dept_id     | A         |           3 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+

案例1:對查詢結果進行按 salary 和 age 都進行升序排序

mysql> explain select salary,age from emp order by salary, age;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra          |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    7 |   100.00 |Using filesort|+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+----------------+1 row in set, 1 warning (0.00 sec)

說明1:Extra 中值為 Using filesort說明是先查出來需要的數據,然后再排序的,效率不高。

說明2:為什么會出現Using filesort呢?因為查詢的這些字段在查詢之前是無須的,索引需要先將數據查詢出來,然后再做排序,這樣才能得到想要的排序好的數據。

案例2:給 salary 和 age 添加一個聯合排序

mysql> create index salary_age_idx onemp(salary,age);Query OK, 0 rows affected (0.07 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> show index from emp;+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| Table | Non_unique | Key_name       | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| emp   |          0 | PRIMARY        |            1 | id          | A         |           7 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       || emp   |          1 | fk_dept        |            1 | dept_id     | A         |           3 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       || emp   |          1 | salary_age_idx |            1 | salary      | A         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL ||emp   |          1 | salary_age_idx |            2 | age         | A         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL |+-------+------------+----------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+4 rows in set (0.00 sec)

說明1:聯合索引salary_age_idx中 salary 是第一索引字段,age 是第二索引字段

說明2:Collation 中A 代表升序,D 代表降序    

案例3:再次使用 order by 對 salary 和 age 進行升序排序

mysql> explain select salary,age from emp order by salary,age;+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type  | possible_keys | key            | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-------------+|  1 | SIMPLE      | emp   | NULL       | index | NULL          | salary_age_idx | 10      | NULL |    7 |   100.00 | Using index |+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)mysql> explain select salary,age from emp order by salary;+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type  | possible_keys | key            | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-------------+|  1 | SIMPLE      | emp   | NULL       | index | NULL          | salary_age_idx | 10      | NULL |    7 |   100.00 | Using index |+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)

說明1:在做升序排列時,無論 order by 后面是組合索引的全部字段,還是只有部分字段,這時 Extra 的值都是Usind index,所以其查詢的結果直接就是排序好的結果

說明2:為什么呢?因為這個時候 salary和age是一個聯合索引,索引在文件中是一個帶順序的b+數結構,所以將這個字段建立一個聯合索引,就意味著使用索引查詢的時候,就已經是帶著順序的數據了,所以這個時候就不需要在將數據從新在排序了,這樣的查詢效率就會更高。

案例4: order by 中的字段順序和索引順序不一致的情況

mysql> explain select salary,age from emp order by age,  salary;+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-----------------------------+| id | select_type | table | partitions | type  | possible_keys | key            | key_len | ref  | rows | filtered | Extra                       |+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-----------------------------+|  1 | SIMPLE      | emp   | NULL       | index | NULL          | salary_age_idx | 10      | NULL |    7 |   100.00 | Using index; Using filesort|+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+-----------------------------+1 row in set, 1 warning (0.00 sec)

說明1:這個時候order by 是age在前,salary在后,和索引的順序不一致,仍然會觸發索引,使用Using index,但是也會使用Using filesort,所以推薦大家使用正確的索引順序的字段來進行排序

案例5:對salary和age做降序查詢

mysql> explain select salary,age from emp order by salary desc, age desc;+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+----------------------------------+| id | select_type | table | partitions | type  | possible_keys | key            | key_len | ref  | rows | filtered | Extra                            |+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+----------------------------------+|  1 | SIMPLE      | emp   | NULL       | index | NULL          | salary_age_idx | 10      | NULL |    7 |   100.00 | Backward index scan; Using index|+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+----------------------------------+1 row in set, 1 warning (0.00 sec)
mysql> explain select id,salary,age from emp order by salary desc;+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+----------------------------------+| id | select_type | table | partitions | type  | possible_keys | key            | key_len | ref  | rows | filtered | Extra                            |+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+----------------------------------+|  1 | SIMPLE      | emp   | NULL       | index | NULL          | salary_age_idx | 10      | NULL |    7 |   100.00 | Backward index scan; Using index|+----+-------------+-------+------------+-------+---------------+----------------+---------+------+------+----------+----------------------------------+1 row in set, 1 warning (0.00 sec)

說明1:無論是對salary和age同時做降序還是對其中一個字段做降序排列,都會出現Backward index scan; Using index,其中 Backward index scan 是反向掃描索引

說明2:這是因為索引中默認的順序是升序的,而做降序排列,就需要反向掃描索引了

案例7:創建一個 salary 和 age 都是降序的索引

create index salary_age_desc_idx on emp(salary desc, age desc);Query OK, 0 rows affected (0.02 sec)Records: 0  Duplicates: 0  Warnings: 0

查詢目前所有的索引

mysql> show index from emp;+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| Table | Non_unique | Key_name            | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| emp   |          0 | PRIMARY             |            1 | id          | A         |           7 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       || emp   |          1 | fk_dept             |            1 | dept_id     | A         |           3 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       || emp   |          1 | salary_age_desc_idx |            1 | salary      | D         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL || emp   |          1 | salary_age_desc_idx |            2 | age         | D         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL || emp   |          1 | salary_age_idx      |            1 | salary      | A         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       || emp   |          1 | salary_age_idx      |            2 | age         | A         |           7 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |+-------+------------+---------------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+6 rows in set (0.01 sec)

說明1:這里 salary_age_desc_idx 就是根據 salary 和 age 做的降序索引,其Collation中的D即降序的意思

案例8:使用salary_age_desc_idx索引然后在使用order by降序查詢

mysql> explain select salary,age from emp use index(salary_age_desc_idx) order by salary desc, age desc;+----+-------------+-------+------------+-------+---------------+---------------------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type  | possible_keys | key                 | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+-------+---------------+---------------------+---------+------+------+----------+-------------+|  1 | SIMPLE      | emp   | NULL       | index | NULL          | salary_age_desc_idx | 10      | NULL |    7 |   100.00 | Using index |+----+-------------+-------+------------+-------+---------------+---------------------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.01 sec)

說明1:這個時候的Extra 中顯示的 Using index,效率就會比較高了

說明2:這是因為salary_age_desc_idx索引的順序就是降序排列的,所以使用該索引做降序排列的時候,就不需要在做反向掃描

說明3:在實際的業務中,我們可以根據自己的查詢需要,創建升序或者降序的索引。

3.4 order by總結根據排序字段建立合適的索引,多字段排序是,也遵循最左前綴法則盡量使用覆蓋索引多字段排序,如果有升序有降序,此時需要注意聯合索引在創建時的規則,也應該有對應的升序和降序如果不可避免的出現filesort,大數據量排序的時候,可以適當增大排序緩沖區的大小,sort_buffer_size(默認256K)四、group by優化

為了測試數據的準確性,這是我先把除了主鍵以外的索引都刪除了,然后根據需要在重新創建

mysql> show index from emp;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| emp   |          0 | PRIMARY  |            1 | id          | A         |           7 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+2 rows in set (0.01 sec)

案例1:根據job做聚合查詢

mysql> select job, count(*) from emp group by job;;+--------------+----------+| job          | count(*) |+--------------+----------+| 董事長       |        1 || 項目經理     |        1 || 開發         |        3 || 財務         |        1 || 出納         |        1 || 人事         |        1 |+--------------+----------+6 rows in set (0.00 sec)

我們使用explain查看一下執行計劃

mysql> explain select job, count(*) from emp group by job;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-----------------+| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra           |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-----------------+|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    7 |   100.00 | Using temporary |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-----------------+1 row in set, 1 warning (0.00 sec)

說明1:通過Extra字段:Using temporary,說明在這次的查詢中創建了一張臨時表,這是無論是空間上還是速度上都會影響到查詢效率的。

這時我們給 job 創建一個索引,再次使用explain查看一下執行計劃

mysql> create index job_idx onemp(job);Query OK, 0 rows affected (0.02 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> show index from emp;+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| Table | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| emp   |          0 | PRIMARY  |            1 | id          | A         |           7 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       || emp   |          1 | job_idx  |            1 | job         | A         |           6 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       |+-------+------------+----------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+
mysql> explain select job, count(*) from emp group by job;+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+|  1 | SIMPLE      | emp   | NULL       | index | job_idx       | job_idx | 83      | NULL |    7 |   100.00 | Using index|+----+-------------+-------+------------+-------+---------------+---------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)

說明2:這是查詢中就使用到了索引查詢,而沒有建立臨時表

這時我們在對 job 和 age 同時做分組查詢

mysql> explain select job,age, count(*) from emp group by job,age;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-----------------+| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra           |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-----------------+|  1 | SIMPLE      | emp   | NULL       | ALL  | NULL          | NULL | NULL    | NULL |    7 |   100.00 | Using temporary|+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-----------------+1 row in set, 1 warning (0.00 sec)

說明3:這時Extra字段的值,仍然是Using temporary,那是因為沒有一個與之對應的聯合索引。

我們繼續創建一個 job 和 age 的聯合索引,然后再看一下 explain 的執行計劃

mysql> create index job_age_idx onemp(job,age);Query OK, 0 rows affected (0.05 sec)Records: 0  Duplicates: 0  Warnings: 0mysql> show index from emp;+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| Table | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality | Sub_part | Packed | Null | Index_type | Comment | Index_comment | Visible | Expression |+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+| emp   |          0 | PRIMARY     |            1 | id          | A         |           7 |     NULL |   NULL |      | BTREE      |         |               | YES     | NULL       || emp   |          1 | job_idx     |            1 | job         | A         |           6 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL       || emp   |          1 | job_age_idx |            1 | job         | A         |           6 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL || emp   |          1 | job_age_idx |            2 | age         | A         |           6 |     NULL |   NULL | YES  | BTREE      |         |               | YES     | NULL|+-------+------------+-------------+--------------+-------------+-----------+-------------+----------+--------+------+------------+---------+---------------+---------+------------+5 rows in set (0.00 sec)
mysql> select job,age,count(*) from emp group by job,age;+--------------+------+----------+| job          | age  | count(*) |+--------------+------+----------+| 人事         |   27 |        1 || 出納         |   25 |        1 || 開發         |   22 |        2 || 開發         |   24 |        1 || 董事長       |   43 |        1 || 財務         |   25 |        1 || 項目經理     |   38 |        1 |+--------------+------+----------+7 rows in set (0.00 sec)mysql> explain select job,age,count(*) from emp group by job,age;+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type  | possible_keys | key         | key_len | ref  | rows | filtered | Extra       |+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+|  1 | SIMPLE      | emp   | NULL       | index | job_age_idx   | job_age_idx | 88      | NULL |    7 |   100.00 | Using index|+----+-------------+-------+------------+-------+---------------+-------------+---------+------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)

說明4:當我們group by后面的分組字段,存在于某一個聯合索引中的時候,group by會使用索引查詢,而不會建立臨時表

案例2:我們根據job做過濾然后再根據age排序

mysql> select job,age from emp where job="開發" group by age;+--------+------+| job    | age  |+--------+------+| 開發   |   22 || 開發   |   24 |+--------+------+2 rows in set (0.01 sec)mysql> explain select job,age from emp where job="開發" group by age;+----+-------------+-------+------------+------+---------------------+-------------+---------+-------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys       | key         | key_len | ref   | rows | filtered | Extra       |+----+-------------+-------+------------+------+---------------------+-------------+---------+-------+------+----------+-------------+|  1 | SIMPLE      | emp   | NULL       | ref  | job_idx,job_age_idx | job_age_idx| 83      | const |    3 |   100.00 | Using index|+----+-------------+-------+------------+------+---------------------+-------------+---------+-------+------+----------+-------------+1 row in set, 1 warning (0.00 sec)

說明1:當where后面的條件和group by 后面的條件一起組合成連鎖索引,也不會建立臨時表,也會直接走連個查詢索引的。效率同樣比較高

總結:

在分組操作時,可以通過索引來提高效率分組操作時,索引的使用也滿足最左前綴法則五、limit優化

account_transaction表數據量展示

mysql> select count(*) from account_transaction;+----------+| count(*) |+----------+|  2261942 |+----------+1 row in set (8.40 sec)

說明1:account_transaction總數據量有226萬+

案例1:分別采用分頁查詢,第一頁,第1萬頁,200萬頁的數據

mysql> select * from account_transaction limit 1,2;+----+--------------------+--------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+| id | trade_no           | type   | method | time                       | payment       | out_trade_no | amount | balance | trader_staff_id | operator_staff_id | device_id | remark |+----+--------------------+--------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+|  2 | 156384294742000250 | TOP_UP | CASH   | 2019-07-23 00:49:07.072256 | LOCAL_ACCOUNT |              |  10000 |   10000 |             250 |                12 | 6         |        ||  3 | 156384301875000251 | TOP_UP | CASH   | 2019-07-23 00:50:18.059192 | LOCAL_ACCOUNT |              |  10000 |   10000 |             251 |                12 | 6         |        |+----+--------------------+--------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+2 rows in set (0.00 sec)mysql> select * from account_transaction limit 10000,2;+-------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+| id    | trade_no           | type          | method | time                       | payment       | out_trade_no | amount | balance | trader_staff_id | operator_staff_id | device_id | remark |+-------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+| 10054 | 156506391300003827 | CONSUME_LUNCH |        | 2019-08-06 03:58:33.000000 | LOCAL_ACCOUNT |              |    200 |    9800 |            3827 |                 0 | 27        |        || 10055 | 156506391300002816 | CONSUME_LUNCH |        | 2019-08-06 03:58:33.000000 | LOCAL_ACCOUNT |              |    200 |    9800 |            2816 |                 0 | 19        |        |+-------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+2 rows in set (0.02 sec)mysql> select * from account_transaction limit 2000000,2;+---------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+| id      | trade_no           | type          | method | time                       | payment       | out_trade_no | amount | balance | trader_staff_id | operator_staff_id | device_id | remark |+---------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+| 5524352 | 163539315991003043 | CONSUME_LUNCH |        | 2021-10-28 03:52:39.000000 | LOCAL_ACCOUNT |              |    200 |    3800 |            3043 |                 0 | 34        |        || 5524354 | 163539342290003077 | CONSUME_LUNCH |        | 2021-10-28 03:57:02.000000 | LOCAL_ACCOUNT |              |    200 |    1500 |            3077 |                 0 | 19        |        |+---------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+2 rows in set (2.51 sec)

說明1:我們對1頁,1萬頁,200萬頁的數據分別查詢,發現隨著查詢數據量的增加,查詢的時間也在增加

說明2:當我們查詢limit 2000000,2時,此時需要Mysql排序錢2000002條記錄,但是僅僅需要返回200001-20002的記錄,前2000000條記錄丟棄,查詢排序的代價非常大

查詢優化

mysql> select a.* from account_transaction as a, (select id from account_transaction order by id limit 2000000,2) as at where a.id = at.id;+---------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+| id      | trade_no           | type          | method | time                       | payment       | out_trade_no | amount | balance | trader_staff_id | operator_staff_id | device_id | remark |+---------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+| 5524352 | 163539315991003043 | CONSUME_LUNCH |        | 2021-10-28 03:52:39.000000 | LOCAL_ACCOUNT |              |    200 |    3800 |            3043 |                 0 | 34        |        || 5524354 | 163539342290003077 | CONSUME_LUNCH |        | 2021-10-28 03:57:02.000000 | LOCAL_ACCOUNT |              |    200 |    1500 |            3077 |                 0 | 19        |        |+---------+--------------------+---------------+--------+----------------------------+---------------+--------------+--------+---------+-----------------+-------------------+-----------+--------+2 rows in set (0.51 sec)

說明3:同樣是分頁查詢2000000頁以后的數據,該查詢僅好事0.51秒,比直接使用limit分頁查詢快了幾倍

說明4:Mysql官方針對大數據量的分頁查詢給出的方案是,建議使用覆蓋查詢加子查詢形式進行優化

說明5:該插敘的子查詢:select id from account_transaction order by id limit 2000000,2,首先這是根據id查詢到需要數據的id,本身根據id查找就是比較快的。

mysql> select id from account_transaction order by id limit 2000000,2;+---------+| id      |+---------+| 5524352 || 5524354 |+---------+2 rows in set (0.45 sec)

說明6:將該子查詢的結果當做一張表,與account_trasaction做子查詢,這樣效率就會比直接使用limit速度快很多。

六、count優化  6.1 count() 原理

是一個聚合函數,對于返回的結果集,一行一行的判斷,如果count函數的參數不為NULL,累計值就+1,否則不加1,最后返回累計值

6.2 count的幾種用法

count(*):

InnoDB引擎并不會把全部的字段取出來,而是專門做了優化,不取值,服務層直接按行進行累加,mysql 對count(*)做了優化。

count(主鍵)

InnoDB引擎會遍歷整張表,把每一行的主鍵id值都取出來,返回給服務層,服務層那個主鍵后,直接按行進行累加(主鍵不可能為空)

count(普通字段):

沒有not null 約束:InnoDB引擎會遍歷整張表,把每一行的字段值都取出來,返回給服務層,服務層判斷是否為null,不為null,計數+1.

有not null 約束:InnofDB引擎會遍歷整張表,把每一行的字段值都取出來,返回給服務層,直接按行累加

count(1)

InnoDB引擎遍歷整張表,但不取值,服務層對于返回的每一行,放一個數字“1”進去,直接按行進行累加。

6.3 效率排序

count(*) ≈count(1)>count(id)>count(普通字段)

七、update優化  7.1案例1:根據索引修改數據,僅僅會觸發行鎖

說明1:因為左邊和右邊都是根據id修改的不同數據,這時id是主鍵索引,所以這里的修改都只會觸發行鎖,不會影響其他行的修改。

7.2案例2:根據非索引字段同時修改記錄數據

說明1:update的時候,如果條件是索引字段,則只會觸發行索引

說明2:updae的時候,如果條件是非索引字段,則會觸發表索引,即在update的時候,整張表處于鎖住的狀態。

說明3:主需要對update的字段創建一個索引值,就可以在update的時候將表鎖降低為行鎖。

7.3 總結:

InnoDB的行鎖是針對索引加的鎖,不是針對記錄加的鎖,并且該索引不能失效,否則會從行鎖升級為表鎖。

[責任編輯:linlin]

標簽:

相關文章

評論排行
熱門話題
最近更新
主站蜘蛛池模板: 海德机械设备有限公司| 江苏双友重型机械有限公司 | 北京起重机械有限公司| 徐州利国钢铁有限公司| 合肥精密机械有限公司| 福州四兴机械有限公司| 冶金机械制造有限公司| 华东机械制造有限公司| 大连工进机械制造有限公司| 苏州市联佳精密机械有限公司| 东莞正为机械有限公司| 张家港斯依格机械设备制造有限公司| 安徽国梁机械设备有限公司| 广州盛广誉机械设备有限公司 | 江苏红旗印染机械有限公司| 常州宏机械有限公司| 宜都大一重工有限公司| 威斯特机械有限公司| 宁波旭升机械有限公司| 南通苏诺特包装机械有限公司| 台州博州机械有限公司| 江阴韩一钢铁有限公司| 合肥方圆机械有限公司| 长葛市机械有限公司| 辽阳筑路机械有限公司| 河北中浩机械制造有限公司 | 天津起重机械有限公司| 河南省起重机械有限公司| 东莞奥锐机械有限公司| 柳州欧维姆机械有限公司| 中海福陆重工有限公司招聘| 江苏博森机械制造有限公司| 昆山硕杰机械有限公司| 潍坊机械制造有限公司| 河钢乐亭钢铁有限公司| 上海大恒光学精密机械有限公司| 河北新金钢铁有限公司| 东莞巨冈机械有限公司| 扬州恒佳机械有限公司| 荆州祥达机械制造有限公司| 常州坤世精密机械有限公司| 徐州宝丰钢铁有限公司| 富伟精密机械有限公司| 山东 重工有限公司| 新昌华亿机械有限公司| 陕西恒德精密机械有限公司| 东莞市科环机械设备有限公司| 长春合心机械制造有限公司| 宏源机械设备有限公司| 恒兴机械设备有限公司| 溧阳科华机械制造有限公司| 苏州江源精密机械有限公司| 上海 食品机械有限公司| 五矿钢铁西安有限公司| 欧克机械制造有限公司| 杭州海纳机械有限公司| 山东永华机械有限公司| 上海嘉峥机械有限公司| 柳州起重机器有限公司| 广州力净洗涤机械有限公司| 山东恒基钢铁有限公司| 温州韦盛机械有限公司| 山东瑞华工程机械有限公司| 无锡胜喜路机械有限公司| 常矿起重机械有限公司| 威海泓意机械有限公司| 青州泰达机械有限公司| 苏州原禄机械有限公司| 南通明诺机械有限公司| 常州道铖精密机械有限公司| 优瑞纳斯液压机械有限公司| 华电重工装备有限公司| 江阴长达钢铁有限公司| 福建东钢钢铁有限公司| 苏州敏喆机械有限公司| 上海圣起包装机械有限公司| 昆明群泰机械有限公司| 台州通宇变速机械有限公司 | 山东莱工机械制造有限公司| 南兴木工机械有限公司| 宁波江北机械有限公司| 光华机械制造有限公司| 上海申虎包装机械设备有限公司| 昆山鑫建诚机械设备有限公司| 佛山市海裕机械有限公司| 重庆 机械制造有限公司| 郑州郑瑞机械有限公司| 雄雄精密机械有限公司| 泰州市机械制造有限公司| 南京 机械设备 有限公司| 合肥明泰机械施工有限公司| 佛山市优霸机械设备有限公司| 青岛浩翔机械有限公司| 保定东利机械制造有限公司| 北京骏马机械有限公司| 广州市市政工程机械施工有限公司| 苏州旭展机械有限公司| 宜兴富曦机械有限公司| 江苏国天锻压机械有限公司| 北仑旭升机械有限公司| 山东明美数控机械有限公司| 浙江天泰机械有限公司| 青岛圣诺机械有限公司| 招商局重工(江苏)有限公司| 常州朝康机械有限公司| 山东博宇机械有限公司| 河北文丰钢铁有限公司| 北京晨光兴业机械有限公司| 海宁亚东机械有限公司| 天津钢铁销售有限公司| 浙江万通重工有限公司| 佛山市宝捷精密机械有限公司| 绍兴 机械有限公司| 富华重工制造有限公司| 上海卓越机械有限公司| 东莞市三米通用机械有限公司| 上海曼亿包装机械有限公司| 常州曼恩机械有限公司| 江苏苏力机械有限公司| 山东造纸机械厂有限公司| 临沂园林机械有限公司| 山西太行钢铁有限公司| 潍坊重工机械有限公司| 兖州丰业机械有限公司| 元昆机械(昆山)有限公司| 云南机械制造有限公司| 上海力净洗涤机械制造有限公司| 温岭市大众精密机械有限公司| 山东广富钢铁有限公司| 南京嘉诚机械有限公司| 德清泰德机械有限公司| 山西天祥机械有限公司| 贵州工程机械有限公司| 品龙精工机械有限公司| 潍坊市贝特机械有限公司| 渡边食品机械有限公司| 柳州丹顺机械有限公司| 宁波旭升机械有限公司| 上海捷如重工机电设备有限公司| 德昌机械制造有限公司| 江苏贸隆机械制造有限公司| 浙江 料机械有限公司| 堃霖冷冻机械有限公司| 泰田液压机械有限公司| 上海三久机械有限公司| 南京伟舜机械有限公司| 浙江省机械有限公司| 泰安正阳机械有限公司| 盐城市丰特铸造机械有限公司| 湖北大展钢铁有限公司| 禹城通裕新能源机械铸造有限公司 | 上海中吉机械制造有限公司| 天津市液压机械有限公司| 上海山启机械制造有限公司| 志庆机械设备有限公司| 卫华起重机有限公司| 郑州天龙机械有限公司| 苏州苏安起重吊装有限公司| 禹城 机械 有限公司| 浙江荣德机械有限公司| 郑州万谷机械有限公司| 宁波博旺机械有限公司| 江苏祥达机械制造有限公司| 输送机械制造有限公司| 聊城机械设备有限公司| 青岛金福鑫塑料机械有限公司 | 新乡市佳盛振动机械有限公司| 烟台石油机械有限公司| 北京洛克机械有限公司| 洛阳机械制造有限公司| 江苏铁本钢铁有限公司| 唐山经安钢铁有限公司| 粮油机械设备有限公司| 苏州盛友机械有限公司| 张家口煤矿机械制造有限公司| 广州市佳速精密机械有限公司| 机械有限公司 张家港| 珠海仕高玛机械设备有限公司| 上海诚淘机械有限公司| 金马机械制造有限公司| 上海捷舟工程机械有限公司| 台州嘉瑞机械有限公司| 江苏鸡煤机械有限公司| 莒县长运机械有限公司| 开封市茂盛粮食机械有限公司 | 济宁鑫聚机械有限公司| 上海佳成服装机械有限公司| 上海西马特制药机械有限公司| 陕西至信机械制造有限公司怎么样 | 济宁机械设备有限公司| 江苏鼎盛重工有限公司| 广东重工建设监理有限公司| 瑞安瑞泰机械有限公司| 北京起重机械有限公司| 烟台海兰德机械设备有限公司 | 舞钢中加钢铁有限公司| 山西天巨重工机械有限公司| 郑州昌利机械制造有限公司| 宁波天辉机械有限公司| 东莞志成机械有限公司| 锦州俏牌机械有限公司| 江苏明珠试验机械有限公司| 河南宏基矿山机械有限公司| 临清市机械有限公司| 苏州海盛精密机械有限公司怎么样| 常州立达纺织机械有限公司| 湖北昌胜机械设备制造有限公司| 常林道依茨法尔机械有限公司| 山东长城起重机械有限公司| 中机北方机械有限公司| 苏州久富农业机械有限公司| 宁波 机械 有限公司| 苏州力强机械制造有限公司| 保定东利机械制造有限公司| 浙江保龙机械有限公司| 湖北机械制造有限公司| 辽宁亿丰钢铁有限公司| 杭州恒宏机械有限公司| 如皋市联创捏合机械有限公司| 江苏青山机械有限公司| 挤出机械 有限公司| 常州市锦益机械有限公司| 德昌誉机械制造有限公司| 陕西 工程机械有限公司| 鼎盛机械设备有限公司| 上海喜曼机械有限公司| 上海固好包装机械有限公司 | 大连龙尧塑料机械有限公司| 苏州鸿安机械有限公司| 上海京雅机械有限公司| 河南德润钢铁有限公司| 上海冠龙阀门机械有限公司官网| 常州创机械有限公司| 南京华勒机械有限公司| 广州市荣艺食品机械有限公司| 山东农业机械有限公司| 无锡鹰普机械有限公司| 徐工工程机械有限公司| 章丘宇龙机械有限公司| 宝鸡 机械有限公司| 宁波华强机械有限公司| 平湖市机械有限公司| 上海国豪机械制造有限公司| 廊坊包装机械有限公司| 诸城市博康机械有限公司| 昆山环保机械有限公司| 杭州青达机械有限公司| 湖南天雁机械责任有限公司| 龙口泰进机械有限公司| 连云港 机械有限公司| 东莞市永乐机械有限公司| 工程机械配件有限公司| 登福机械上海有限公司| 宏祥建筑机械有限公司| 丰润区钢铁有限公司| 哈挺精密机械有限公司| 鹤壁市双信矿山机械有限公司 | 济南鑫金龙机械有限公司| 鹰起重机械有限公司| 苏州派普机械有限公司| 德阳 机械有限公司| 徐州压力机械有限公司| 山西海威钢铁有限公司| 江苏仁达机械有限公司怎么样| 银三环机械有限公司| 广州市汇格机械设备有限公司| 烟台工程机械有限公司| 廊坊德基机械有限公司| 上海盟申机械设备有限公司| 中煤盘江重工有限公司| 山东六丰机械工业有限公司| 广州美特机械有限公司| 温州市友田包装机械有限公司| 丹阳荣嘉精密机械有限公司| 大连港机械有限公司| 湖南威士重工机械有限公司| 中山市凌宇机械有限公司| 浙江荣升机械有限公司| 广州华臻机械设备有限公司| 重庆钢实机械有限公司| 济南 建筑机械有限公司| 广州盛广誉机械设备有限公司| 苏州市恒升机械有限公司| 杭州天杨机械有限公司| 鞍钢朝阳钢铁有限公司| 宏兴钢铁有限公司官网| 昆明群泰机械有限公司| 上海洋邦机械设备有限公司| 上海祝融起重机械有限公司| 欧力特机械有限公司| 吴江机械设备有限公司| 海之力机械有限公司| 上海亚遥工程机械有限公司| 东莞市英豪机械有限公司| 安徽国梁机械设备有限公司 | 机械有限公司 招聘| 扬州涂装机械有限公司| 山东临工机械有限公司| 青岛数控机械有限公司| 佛山隆机械有限公司| 上海机械装备有限公司| 东莞市康机械有限公司| 上海尼法机械有限公司| 江苏钢锐精密机械有限公司 | 浙江博创机械有限公司| 泰安市民乐机械制造有限公司| 神工机械制造有限公司| 河北雪龙机械制造有限公司| 上海齐耀螺杆机械有限公司| 上海七洋液压机械有限公司| 杭州速博雷尔传动机械有限公司 | 四川盛和机械设备有限公司 | 常州宝菱重工机械有限公司| 苏州鼎木机械设备有限公司| 江阴市新友机械制造有限公司 | 广州合成机械有限公司| 河南耿力支护机械设备有限公司| 苏州华尔普机械有限公司| 陕西金奇机械电器制造有限公司| 安宁永昌钢铁有限公司| 广州市通风机械设备有限公司| 石家庄三一众力工程机械有限公司 | 江苏金荣机械有限公司| 廊坊包装机械有限公司| 江苏中圣机械制造有限公司 | 郑州水工机械有限公司招聘| 江苏联顺机械有限公司| 泰安东岳重工有限公司| 金华市 机械制造有限公司| 安徽艾特巴机械制造有限公司| 山西建龙钢铁有限公司地址| 合肥逸飞包装机械有限公司| 澳太机械制造有限公司| 南京康尼精密机械有限公司| 惠州机械设备有限公司| 烟台绿林机械设备制造有限公司| 建荣精密机械有限公司| 浙江瑞志机械有限公司| 宁波科鼎钢铁有限公司| 上海佳力士机械有限公司| 江苏竣业过程机械设备有限公司| 上海戈扬包装机械有限公司| 上海宝丰机械制造有限公司| 大连龙尧塑料机械有限公司 | 广州机械自动化有限公司| 瀚乐电子机械有限公司| 台州万洲机械有限公司| 山东龙辉起重机械有限公司| 上海起思宠物有限公司| 杭州大精机械制造有限公司| 合肥中辰轻工机械有限公司| 威海华丰机械有限公司| 浙江凯岛起重机械有限公司| 宁波海伯精密机械制造有限公司| 福宁船舶重工有限公司| 江苏仁达机械有限公司怎么样| 天赛塑胶机械有限公司| 东莞市旭田包装机械有限公司 | 万兹莱压缩机械(上海)有限公司 | 机械设备出口有限公司| 咸阳 机械制造有限公司| 常州万高机械制造有限公司| 中交西安筑路机械有限公司| 沃洲机械制造有限公司| 富阳液压机械有限公司| 深圳创能机械有限公司| 抚顺机械制造有限公司| 湖北天和机械有限公司| 浙江隆信机械制造有限公司| 常州好迪机械有限公司| 南京华勒机械有限公司| 南京 机械制造有限公司| 广州市力进食品机械有限公司| 北京航天振邦精密机械有限公司 | 济南艺高数控机械有限公司| 南通科邦机械有限公司| 青岛农业机械有限公司| 潞城兴宝钢铁有限公司| 深圳龙润彩印机械设备有限公司| 义乌机械设备有限公司| 三一重工昆山有限公司| 长春泰盟机械制造有限公司| 起重设备(上海)有限公司| 贝力特机械有限公司| 黄石华旦机械制造有限公司| 潍坊 机械有限公司| 浙江康明斯机械有限公司| 上海曼亿包装机械有限公司 | 广州惠辉机械设备有限公司| 苏州拓博机械设备有限公司 | 摩德娜机械有限公司| 广州山推机械有限公司| 庆达机械制造有限公司| 江苏科威机械有限公司| 山东宝星机械有限公司| 江阴万恒机械制造有限公司| 齐鲁石化机械制造有限公司招聘 | 震德塑料机械有限公司| 昆山锦沪机械有限公司| 武汉环卫机械有限公司| 青岛奥硕数控机械有限公司| 新乡市起重机厂有限公司| 广东仕诚塑料机械有限公司| 河北 机械 有限公司| 友嘉精密机械有限公司| 山东大汉建设机械有限公司| 徐州川一工程机械有限公司| 无锡前洲兴华机械有限公司 | 福建东亚机械有限公司| 大洋食品机械有限公司| 山东明美数控机械有限公司| 山东博杰重型工程机械有限公司 | 首唐宝生钢铁有限公司| 恒昌机械制造有限公司| 河南省新乡市矿山起重机有限公司| 上海小虎机械有限公司| 江苏汤姆包装机械有限公司| 浙江双畅起重机械有限公司 | 吉林鑫达钢铁有限公司地址| 有限公司名字起名大全| 沙钢永兴钢铁有限公司| 青岛安成食品机械有限公司| 徐州川一工程机械有限公司| 宁波华表机械制造有限公司| 广州赛思达机械设备有限公司| 郑州东方重型机械有限公司| 东莞港重机械有限公司| 杭州青达机械有限公司| 苏州日拓机械有限公司| 上海铁美机械有限公司| 辛集市澳森钢铁有限公司| 宁波佳尔灵气动机械有限公司| 上海合劲传动机械有限公司 | 河南飞龙工程机械制造有限公司 | 青岛一津机械有限公司| 潍坊圣旋机械有限公司| 江苏桂铭机械有限公司| 广州东昇机械有限公司| 浙江欧耀机械有限公司| 利勃海尔机械大连有限公司| 常州经编机械有限公司| 常州豪凯机械有限公司| 常德三一机械有限公司| 科尼起重机设备(上海)有限公司| 天津 机械制造有限公司| 潍坊瑞发机械有限公司| 青岛堡鑫机械有限公司| 合肥永升机械有限公司| 济南 机械有限公司| 沈阳小松工程机械有限公司| 昆山总馨机械有限公司| 新疆八一钢铁有限公司| 天津市仁翼钢铁有限公司| 杭重工程机械有限公司| 南京化工机械有限公司| 武汉鑫巨力精密机械制造有限公司 | 昆山机械设备有限公司| 菲特压片机械有限公司| 东莞市旭田包装机械有限公司| 青岛机械利有限公司| 西安海焱机械有限公司| 娄底 机械有限公司| 杭州联德机械有限公司| 亚龙机械制造有限公司| 长沙威沃机械制造有限公司| 宜都大一重工有限公司| 深圳市合发齿轮机械有限公司| 杭州液压机械有限公司| 广州汉牛机械设备有限公司| 江苏舜天机械进出口有限公司| 温州瑞达机械有限公司| 上海瑞派机械有限公司招聘| 大连机械设备有限公司| 洛阳中收机械装备有限公司招聘| 贵州红林机械有限公司| 徐州宝丰钢铁有限公司| 浙江中禾机械有限公司| 昆山鑫建诚机械设备有限公司 | 江苏中科机械有限公司| 宝钢湛江钢铁有限公司| 鑫泰数控机械有限公司| 华电曹妃甸重工装备有限公司| 四川华为钢铁有限公司| 无锡传动机械有限公司| 宁波旭升机械有限公司| 深圳市康铖机械设备有限公司 | 庆中机械制造有限公司| 南通力福通起重机械有限公司| 深圳市宏机械设备有限公司| 山东金亿机械制造有限公司| 瑞安包装机械有限公司| 宁波拓诚机械有限公司| 上海航发机械有限公司| 东莞达成机械设备制造有限公司 | 江苏佳粮机械有限公司| 南京福能机械设备有限公司| 四川蓝星机械有限公司| 上海丁博重工机械有限公司| 浙江绿峰机械有限公司| 郑州市天赐重工机械有限公司| 厦门黎明机械有限公司| 物理农林机械有限公司| 起重设备(上海)有限公司| 苏州金韦尔机械有限公司| 山东山鼎工程机械有限公司| 上海科熙起重设备有限公司| 山东中探机械有限公司| 招远矿山机械有限公司| 江西机械设备有限公司| 江阴华东机械有限公司| 长春泰盟机械制造有限公司 | 南通明德重工有限公司| 上海钢铁交易中心有限公司| 东莞鸿昌机械有限公司| 张家港市塑机械有限公司| 浙江方邦机械有限公司| 广州惠德机械有限公司| 天宇机械制造有限公司| 常州万高机械制造有限公司| 昆山日日先精密机械有限公司| 江重机械制造有限公司| 河南新起点印务有限公司| 鄂州吴城钢铁有限公司| 东莞丰堡精密机械有限公司| 德大机械昆山有限公司| 佛山市优霸机械设备有限公司| 安阳市赛尔德精工机械有限公司| 涂装机械设备有限公司| 临广电气机械有限公司| 飞虎机械制造有限公司| 河北德欧机械有限公司| 北京明日之星玻璃机械有限公司| 江苏仁达机械有限公司| 东阳市佳先机械制造有限公司| 河南重机械有限公司| 辽宁 机械制造有限公司| 昆山尚亦精密机械有限公司| 广州西力机械有限公司| 大连地拓重工有限公司怎么样| 慈溪 机械 有限公司| 台州 机械有限公司| 威海隆发机械有限公司| 新乡市金原起重机械有限公司| 鞍山 机械有限公司| 烟台海兰德机械设备有限公司| 成都液压机械有限公司| 浙江金华机械有限公司| 山东精密机械有限公司| 扬州文轩钢铁有限公司| 润源经编机械有限公司| 利勃海尔机械大连有限公司| 宁波佳诚机械有限公司| 杭州康发塑料机械有限公司| 九江萍钢钢铁有限公司| 济南 机械设备有限公司| 河北宏川机械制造有限公司| 汉中朝阳机械有限公司| 常州布勒机械有限公司| 福建铁拓机械有限公司| 常州迈腾机械有限公司| 温州 轻工机械有限公司| 瑞安市方泰机械有限公司| 济南市恒宇机械有限公司 | 南通明德重工有限公司| 河北雪龙机械制造有限公司| 惠州机械设备有限公司| 建筑工程有限公司起名| 上海亚遥工程机械有限公司| 机械设备制造有限公司| 新乡市新久振动机械有限公司 | 浙江江鑫机械有限公司| 杭州高福机械制造有限公司| 南通明诺机械有限公司| 上海实机械有限公司| 东莞市联顺机械有限公司| 泉州金鹰机械有限公司| 济南快克数控机械有限公司| 河南耿力机械有限公司| 瑞特精密机械有限公司| 无锡市钢铁有限公司| 昆山市升达机械制造有限公司| 柳州商泰机械有限公司| 郑州 机械有限公司| 禹城市华普机械设备有限公司| 南方力劲机械有限公司| 瑞安市包装机械有限公司| 优瑞纳斯液压机械有限公司| 建材机械制造有限公司| 德蒙压缩机械有限公司| 张家港机械设备有限公司| 新科起重机有限公司| 三一工程机械有限公司| 椿中岛机械有限公司| 成都经纬机械制造有限公司| 陕西通运机械有限公司| 杭州中亚机械 有限公司| 无锡通用起重运输机械有限公司| 厦门群鑫机械工业有限公司| 东莞市联顺机械有限公司| 东莞市印刷机械有限公司| 浙江华塑机械有限公司| 常州欧鹰焊割机械有限公司| 青岛宏达锻压机械有限公司| 全氏食品机械(上海)有限公司 | 上海德珂斯机械自动化技术有限公司| 宁波精密机械有限公司| 新科起重机有限公司| 开封良益机械有限公司| 山东纺织机械有限公司| 山东正阳机械有限公司| 河北奥宇钢铁有限公司| 濮阳市名利石化机械设备制造有限公司| 无锡新麦机械有限公司| 温州正展机械有限公司| 深圳市康铖机械设备有限公司| 沈阳重型机械有限公司| 抚顺新钢铁有限公司| 宣化金科钻孔机械有限公司| 山东天龙机械有限公司| 宁波机械配件有限公司| 汶上金城机械有限公司| 威海华丰机械有限公司| 山东正丰钢铁有限公司| 郑州食品机械有限公司| 东莞包装机械有限公司| 山东隆盛钢铁有限公司| 诸城市日通机械有限公司| 济南锐捷机械设备有限公司 | 烟台市利达木工机械有限公司| 台在机械设备有限公司| 大连 工程机械有限公司| 常州捷佳创精密机械有限公司| 大连亨益机械有限公司| 曼透平机械有限公司| 昆山协扬机械有限公司| 上海霏润机械设备有限公司| 杭州诺迈机械有限公司| 上海沃勒起重设备有限公司| 世翔精密机械制造有限公司| 漳州市机械有限公司| 机械设计 有限公司| 天津市精密机械有限公司| 广州市磊蒙机械设备有限公司| 斗山机械工程有限公司| 上海卓越机械有限公司| 浙江方邦机械有限公司| 浙江汉达机械有限公司| 苏州久富农业机械有限公司| 苏州拓博机械设备有限公司| 欧诺机械 有限公司| 深圳市德机械有限公司| 连云港市机械有限公司| 河南耿力机械有限公司| 洛阳美卓重工机械有限公司 | 南京阿特拉斯机械设备有限公司 | 内蒙古机械有限公司| 佛山市炬盈包装机械有限公司 | 昆明远桥机械有限公司| 济南沃德机械制造有限公司| 广东南牧机械设备有限公司| 柳州市宏华机械有限公司| 诸城市金祥机械有限公司 | 河北常富机械有限公司| 佛山市创宝包装机械有限公司 | 江阴市豪亚机械制造有限公司 | 泰兴市立君机械设备有限公司| 浙江建机工程机械有限公司| 小森机械南通有限公司| 恩格尔机械上海有限公司| 海宁纺织机械有限公司| 射阳县机械有限公司| 四川开拓建筑机械租赁有限公司 | 北京雄伟京发机械加工有限公司| 华威焊割机械有限公司| 江苏长强钢铁有限公司| 河北中伟机械有限公司| 吴江迈锐机械有限公司怎么样 | 江苏鑫林钢铁有限公司| 银三环机械有限公司| 山东源鑫农牧机械有限公司| 上海化工机械厂有限公司| 浙江晨雕机械有限公司| 广东中龙机械有限公司| 广东华鼎机械有限公司| 佛山市机械制造有限公司| 无锡创能机械制造有限公司| 德州液压机械有限公司| 乐陵双鹤机械制造有限公司| 豪利机械苏州有限公司| 晋江市机械有限公司| 郑州升升机械有限公司| 青岛重工机械有限公司| 杭州玻璃机械有限公司| 南京机械设备有限公司| 华泰重工制造有限公司| 盐城 机械有限公司| 东莞五金机械有限公司| 浙江恒齿传动机械有限公司| 星包装机械有限公司| 启瑞机械广州有限公司| 中山精密机械有限公司| 百赞精密机械有限公司| 江苏冠宇机械设备制造有限公司| 陕西至信机械制造有限公司怎么样| 江苏双箭输送机械有限公司| 成都海科机械设备制造有限公司| 常州常林机械有限公司| 东莞市工业机械有限公司| 宁波迪恩机械有限公司| 旭海机械设备有限公司| 上海永德食品机械有限公司| 无锡通用起重运输机械有限公司 | 浙江超洋机械有限公司| 安徽起重机械有限公司| 浙江上易机械有限公司| 东莞钰兴机械有限公司| 江苏贝尔机械有限公司| 邯郸市复液液压机械有限公司| 江阴市机械制造有限公司| 唐山兴隆钢铁有限公司| 河南华北起重吊钩有限公司 | 萍乡萍钢安源钢铁有限公司| 济宁恒远机械有限公司| 襄阳亚舟重型工程机械有限公司| 力邦 机械有限公司| 莱州华汽机械有限公司| 莱州市华弘机械有限公司| 常州杰洋精密机械有限公司| 郑州液压机械有限公司| 鞍山源鑫钢铁有限公司| 浙江雷克机械工业有限公司| 浙江华昌液压机械有限公司| 湖南天拓重工机械有限公司| 江苏双箭输送机械有限公司 | 洛阳鑫超机械有限公司| 常州龙鑫化工机械有限公司| 徐州徐工施维英机械有限公司 | 云南机械制造有限公司| 上海先德机械工程有限公司 | 浙江万通重工有限公司| 温州华珍机械有限公司| 保定市恒瑞游乐机械有限公司 | 杭州雅顿过滤机械有限公司| 苏州华致鑫精密机械有限公司 | 济南圣元机械工程有限公司 | 东莞高恩机械有限公司| 上海松仕机械设备有限公司| 江苏润明机械设备有限公司怎么样| 爱科农业机械有限公司| 烟台万事达金属机械有限公司| 扬州正大机械有限公司| 广州新成机械技术有限公司| 青州三和机械有限公司| 广州众起办公用品有限公司| 杭州容瑞机械技术有限公司| 河北凯瑞重工有限公司| 洛阳塑电机械有限公司| 济南龙铸液压机械有限公司| 河北联港废钢铁回收有限公司| 东莞市利成机械有限公司| 无锡市巨神起重机有限公司| 云南科玛机械设备有限公司 | 起重机械制造有限公司| 昆山工业机械有限公司| 石家庄 机械 有限公司| 鹰起重机械有限公司| 台林机械有限公司 -| 南京高立工程机械有限公司| 昆山塑料机械有限公司| 上海轶鹰起重机械有限公司| 锦机械设备有限公司| 广州旭众食品机械有限公司| 纺织机械制造有限公司| 天津市天重江天重工有限公司| 新乡市中天机械有限公司| 河南机械设备制造有限公司列表 | 仙游东亚机械有限公司| 河南甲庚机械设备有限公司| 宁波钛龙机械有限公司| 山东鲁一机械有限公司| 鞍山机械设备有限公司| 江西柳工机械设备有限公司| 五矿钢铁上海有限公司| 海沃机械扬州有限公司| 苏州金德纬机械有限公司| 新乡市中轻机械有限公司| 佛山市奥索包装机械有限公司 | 营口京华钢铁有限公司| 青岛南牧机械设备有限公司| 深圳机械院建筑设计有限公司 | 湖北三六重工有限公司| 常州液压机械有限公司| 中山市凌宇机械有限公司 | 河北航天振邦精密机械有限公司 | 南京科倍隆机械有限公司| 潍坊裕川机械有限公司| 深圳市 机械有限公司| 山东国新起重机械有限公司| 徐工辽宁机械有限公司| 汕头机械设备有限公司| 青岛银象机械有限公司| 耐驰上海机械仪器有限公司| 江苏机械设备制造有限公司| 平煤机械设备有限公司| 常州铁本钢铁有限公司| 济宁金牛重工有限公司| 洗涤机械制造有限公司| 温州正雄机械有限公司| 青岛力克川液压机械有限公司| 大连港机械有限公司| 青岛 塑料机械有限公司| 上海申虎包装机械设备有限公司| 山东伊莱特重工有限公司| 德阳 机械有限公司| 沧州恒宇机械有限公司| 山东塑机械有限公司| 慈溪科傲机械有限公司| 天津天重江天重工有限公司| 河南天力起重机械有限公司| 无锡秉杰机械有限公司| 辽宁三君机械有限公司| 上海起重机有限公司| 南通江华机械有限公司| 食品有限公司起名大全| 中山市翠山机械制造有限公司| 龙口富元机械有限公司| 上海奎星包装机械有限公司| 宇进注塑机械有限公司| 钜业机械设备有限公司| 江苏大津重工有限公司| 北海船舶重工有限公司| 上海光塑机械制造有限公司| 唐山隆鑫机械有限公司| 黄山市机械有限公司| 欧亚德机械有限公司| 台进精密机械有限公司| 浙江华球机械制造有限公司| 上海捷舟工程机械有限公司| 上海与鑫机械有限公司| 浙江精密机械有限公司| 潍坊爱地植保机械有限公司| 无锡橡塑机械有限公司| 江苏巨威机械有限公司| 福州协展机械有限公司| 济南精密机械有限公司| 常州市机械有限公司| 乐星机械无锡有限公司| 青岛皓腾机械制造有限公司| 西安金力特机械设备有限公司 | 恒兴机械设备有限公司| 新风工程机械有限公司| 合肥华运机械有限公司| 山推工程机械有限公司| 东莞市旭田包装机械有限公司| 亚泰重工机械有限公司| 浙江启博机械有限公司| 苏州联屹精密机械有限公司| 北京大铭世进机械设备有限公司| 重庆中容石化机械制造有限公司| 众立机械制造有限公司| 佛山市柯田包装机械有限公司| 新乡黄氏食品机械有限公司| 建筑装饰有限公司起名| 新乡振动机械有限公司| 江苏机械设备制造有限公司| 山西机械制造有限公司| 菏泽瑞康机械有限公司| 海盐鼎盛机械有限公司| 宝鸡万工机械制造有限公司| 小森机械南通有限公司| 芜湖良仕机械有限公司| 信息工程有限公司起名| 郑州中嘉重工有限公司| 浙江鑫 机械有限公司| 上海成套机械有限公司| 贵州机械设备有限公司| 连云港兴鑫钢铁有限公司| 扬州诺亚机械有限公司| 上海威士机械有限公司| 威海祥光机械有限公司| 浙江富龙钢铁有限公司| 机械有限公司怎么注册| 人科机械设备有限公司| 攀枝花钢铁有限公司| 湖南五丰机械有限公司| 武汉精密机械有限公司| 东莞市瑞辉机械制造有限公司| 邢台市振成机械有限公司| 宜兴市机械有限公司| 江门携成机械有限公司怎样| 东莞市瑞沧机械设备有限公司| 河南瑞峰机械有限公司| 山东诚铭建设机械有限公司| 广州金宗机械有限公司| 广州市荣艺食品机械有限公司| 固达机械制造有限公司| 淄博机械制造有限公司| 史陶比尔精密机械电子有限公司| 汇大机械制造有限公司| 昆山美和机械有限公司| 深圳精机械有限公司| 龙口旭鑫机械有限公司| 鄂州吴城钢铁有限公司| 天津天重江天重工有限公司| 安徽玻璃机械有限公司| 溧阳三元钢铁有限公司| 济宁矿山机械有限公司| 上海三久机械有限公司| 泉州机械制造有限公司| 约翰迪尔佳木斯农业机械有限公司| 河北晓进机械制造有限公司| 上海 精密机械制造有限公司 | 浙江雨霖机械有限公司| 广东科杰机械自动化有限公司| 兖矿东华重工有限公司| 武汉鑫巨力精密机械制造有限公司 | 上海 起重设备有限公司| 重庆地泽机械有限公司| 旺磐精密机械有限公司| 合心机械制造有限公司| 张家口煤矿机械制造有限公司| 江重机械制造有限公司| 锦机械设备有限公司| 东莞市金拓机械有限公司| 青岛特殊钢铁有限公司| 合肥康恒机械有限公司| 河北天择重型机械有限公司| 襄阳亚舟重型工程机械有限公司 | 唐山机械设备有限公司| 太仓越华精密机械配件有限公司 | 广东力源液压机械有限公司| 禹城市华普机械设备有限公司| 科倍隆南京机械有限公司| 安徽 机械设备有限公司| 亚泰重工机械有限公司| 沈阳三洋建筑机械有限公司| 上海毅锴机械有限公司| 新乡市福泽机械设备有限公司 | 余姚市机械有限公司| 上海恒麦食品机械有限公司| 烟台金鹏矿业机械有限公司| 德清恒丰机械有限公司| 江苏中圣机械制造有限公司| 广东日钢机械有限公司| 无锡市浦尚精密机械有限公司| 中科包装机械有限公司| 广东巨风机械制造有限公司| 深圳龙润彩印机械设备有限公司 | 张家港市亿利机械有限公司| 山东隆盛钢铁有限公司| 东莞市益彩机械有限公司| 郑州水工机械有限公司| 重庆海松机械有限公司| 宁波固奇包装机械制造有限公司| 昆山崇粲机械有限公司| 大连龙尧塑料机械有限公司| 南京一嘉起重机械制造有限公司 | 上海中远海运重工有限公司| 东莞宝科机械有限公司| 淄博宏达钢铁有限公司| 西安机械制造有限公司| 华群数控机械有限公司| 南通力福通起重机械有限公司| 齐鲁石化机械制造有限公司招聘| 金属制品有限公司起名| 杭州光大机械有限公司| 东莞市业佳精密机械有限公司| 启英机械设备有限公司| 南京欧能机械有限公司| 山东枭隆机械有限公司| 常州道铖精密机械有限公司| 北仑旭升机械有限公司| 河北龙汐机械制造有限公司 | 常州迈腾机械有限公司| 山西风源机械制造有限公司| 宁波海江机械制造有限公司| 浙江远信印染机械有限公司| 鑫阳机械设备有限公司| 雅康精密机械有限公司| 神工机械制造有限公司| 众力达机械有限公司| 山东瀚业机械有限公司| 浙江上易机械有限公司| 大连卓远重工有限公司| 烟台东恒机械有限公司| 江苏汉鼎机械有限公司| 柳州起重机器有限公司| 重庆钢实机械有限公司| 大连 起 有限公司| 山东新船重工有限公司| 广东包装机械有限公司| 江苏鑫锋重工机床有限公司| 浙江欧迈特减速机械有限公司| 成都工程机械有限公司| 浙江瑞大机械有限公司| 宝钢湛江钢铁有限公司| 南京化工机械有限公司| 大连 工程机械有限公司| 江苏液压机械有限公司|