最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL 函數(shù)索引的優(yōu)化方案

 更新時(shí)間:2020年09月21日 14:58:57   作者:數(shù)據(jù)庫(kù)干貨鋪  
這篇文章主要介紹了MySQL 函數(shù)索引及優(yōu)化方案的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)MySQL,感興趣的朋友可以了解下

很多開(kāi)發(fā)人員在使用MySQL時(shí)經(jīng)常會(huì)在部分列上進(jìn)行函數(shù)計(jì)算等,導(dǎo)致無(wú)法走索引,在數(shù)據(jù)量大的時(shí)候,查詢效率低下。針對(duì)此種情況本文從MySQL5.7 及MySQL8.0中分別進(jìn)行不同方式的優(yōu)化。

1、 MySQL5.7

MySQL5.7版本中不支持函數(shù)索引,因此 遇到函數(shù)索引的時(shí)候需要進(jìn)行修改,否則即使查詢的字段上有索引,執(zhí)行時(shí)也無(wú)法使用索引而進(jìn)行全表掃描,數(shù)據(jù)量大的表查詢時(shí)間會(huì)比較長(zhǎng)。具體案例如下:

1.1 創(chuàng)建測(cè)試表及數(shù)據(jù)

mysql> use testdb;
Database changed
mysql> create table  tb_function(id int primary key auto_increment,name varchar(100),create_time datetime);
Query OK, 0 rows affected (0.01 sec)

mysql> insert into tb_function(name,creatE_time) values('anniuadaOAIFAPUHIA','2020-07-01 12:00:00');
Query OK, 1 row affected (0.02 sec)

mysql> insert into tb_function(name,creatE_time) values('CWQSsar3qcssg','2020-07-01 15:00:00');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tb_function(name,creatE_time) values('vxfqrt2adafz','2020-07-01 21:30:00');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tb_function(name,creatE_time) values('etxzwrwbdhegqgaheqhag','2020-07-02 01:30:00');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tb_function(name,creatE_time) values('awrs433fsgvsfwtwg','2020-07-02 03:30:00');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb_function(name,creatE_time) values('awrs433fsgvsfwtwg','2020-07-02 07:32:00');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb_function(name,creatE_time) values('awrs433fsgvsfwtwg','2020-07-02 10:32:00');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb_function(name,creatE_time) values('tuilklmdadq','2020-07-02 15:32:00');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb_function(name,creatE_time) values('wesv2wqdshehq','2020-07-02 20:32:00');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb_function(name,creatE_time) values('89yoijnlkwr1','2020-07-03 02:56:00');
Query OK, 1 row affected (0.00 sec)

mysql> insert into tb_function(name,creatE_time) values('olj;nsaaq','2020-07-03 08:41:00');
Query OK, 1 row affected (0.01 sec)

mysql> insert into tb_function(name,creatE_time) values('ygo;jkdsaq','2020-07-03 16:20:00'); 
Query OK, 1 row affected (0.01 sec)

mysql> select * from tb_function;
+----+-----------------------+---------------------+
| id | name         | create_time     |
+----+-----------------------+---------------------+
| 1 | anniuadaOAIFAPUHIA  | 2020-07-01 12:00:00 |
| 2 | CWQSsar3qcssg     | 2020-07-01 15:00:00 |
| 3 | vxfqrt2adafz     | 2020-07-01 21:30:00 |
| 4 | etxzwrwbdhegqgaheqhag | 2020-07-02 01:30:00 |
| 5 | awrs433fsgvsfwtwg   | 2020-07-02 03:30:00 |
| 6 | awrs433fsgvsfwtwg   | 2020-07-02 07:32:00 |
| 7 | awrs433fsgvsfwtwg   | 2020-07-02 10:32:00 |
| 8 | tuilklmdadq      | 2020-07-02 15:32:00 |
| 9 | wesv2wqdshehq     | 2020-07-02 20:32:00 |
| 10 | 89yoijnlkwr1     | 2020-07-03 02:56:00 |
| 11 | olj;nsaaq       | 2020-07-03 08:41:00 |
| 12 | ygo;jkdsaq      | 2020-07-03 16:20:00 |
+----+-----------------------+---------------------+
12 rows in set (0.00 sec)

1.2 創(chuàng)建索引

在create_time字段上創(chuàng)建索引

mysql> alter table tb_function add key idx_create_time(create_time);
Query OK, 0 rows affected (0.13 sec)
Records: 0 Duplicates: 0 Warnings: 0

1.3 按時(shí)間查詢

查詢創(chuàng)建時(shí)間是2020-07-01那天的所有記錄

mysql> select * from tb_function where  date(create_time)='2020-07-01';
+----+--------------------+---------------------+
| id | name        | create_time     |
+----+--------------------+---------------------+
| 1 | anniuadaOAIFAPUHIA | 2020-07-01 12:00:00 |
| 2 | CWQSsar3qcssg   | 2020-07-01 15:00:00 |
| 3 | vxfqrt2adafz    | 2020-07-01 21:30:00 |
+----+--------------------+---------------------+
3 rows in set (0.00 sec)

執(zhí)行計(jì)劃如下:

mysql> explain select * from tb_function where  date(create_time)='2020-07-01';
+----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table    | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra    |
+----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------------+
| 1 | SIMPLE   | tb_function | NULL    | ALL | NULL     | NULL | NULL  | NULL |  12 |  100.00 | Using where |
+----+-------------+-------------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

執(zhí)行計(jì)劃中可以看出是進(jìn)行了全面掃描

1.4 優(yōu)化

因MySQL5.7不支持函數(shù)索引,所以需要修改SQL寫(xiě)法來(lái)實(shí)現(xiàn)走索引(或者使用虛擬列的方式),上述SQL可以修改為

mysql> select * from tb_function where  create_time>='2020-07-01' and create_time<date_add('2020-07-01',INTERVAL 1 day);
+----+--------------------+---------------------+
| id | name        | create_time     |
+----+--------------------+---------------------+
| 1 | anniuadaOAIFAPUHIA | 2020-07-01 12:00:00 |
| 2 | CWQSsar3qcssg   | 2020-07-01 15:00:00 |
| 3 | vxfqrt2adafz    | 2020-07-01 21:30:00 |
+----+--------------------+---------------------+
3 rows in set (0.00 sec)

執(zhí)行計(jì)劃如下:

mysql> explain select * from tb_function where  create_time>='2020-07-01' and create_time<date_add('2020-07-01',INTERVAL 1 day);
+----+-------------+-------------+------------+-------+-----------------+-----------------+---------+------+------+----------+-----------------------+
| id | select_type | table    | partitions | type | possible_keys  | key       | key_len | ref | rows | filtered | Extra         |
+----+-------------+-------------+------------+-------+-----------------+-----------------+---------+------+------+----------+-----------------------+
| 1 | SIMPLE   | tb_function | NULL    | range | idx_create_time | idx_create_time | 6    | NULL |  3 |  100.00 | Using index condition |
+----+-------------+-------------+------------+-------+-----------------+-----------------+---------+------+------+----------+-----------------------+
1 row in set, 1 warning (0.00 sec)

可見(jiàn),修改后,使用了索引。

2、MySQL8.0

MySQL8.0的索引特性增加了函數(shù)索引。其實(shí)MySQL5.7中推出了虛擬列的功能,而MySQL8.0的函數(shù)索引也是依據(jù)虛擬列來(lái)實(shí)現(xiàn)的。將上述的案例在MySQL8.0中實(shí)現(xiàn)情況如下文所述。

2.1 創(chuàng)建函數(shù)索引

在將上述的表及數(shù)據(jù)在MySQL8.0的實(shí)例上創(chuàng)建,然后創(chuàng)建create_time的函數(shù)索引,SQL如下

mysql> alter table tb_function add key idx_create_time((date(create_time))); --  注意里面字段的括號(hào)
Query OK, 0 rows affected (0.10 sec)
Records: 0 Duplicates: 0 Warnings: 0

2.2 按時(shí)間查詢

mysql> select * from tb_function where  date(create_time)='2020-07-01';
+----+--------------------+---------------------+
| id | name        | create_time     |
+----+--------------------+---------------------+
| 1 | anniuadaOAIFAPUHIA | 2020-07-01 12:00:00 |
| 2 | CWQSsar3qcssg   | 2020-07-01 15:00:00 |
| 3 | vxfqrt2adafz    | 2020-07-01 21:30:00 |
+----+--------------------+---------------------+
3 rows in set (0.00 sec)

執(zhí)行計(jì)劃如下

mysql> explain select * from tb_function where  date(create_time)='2020-07-01';
+----+-------------+-------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| id | select_type | table    | partitions | type | possible_keys  | key       | key_len | ref  | rows | filtered | Extra |
+----+-------------+-------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
| 1 | SIMPLE   | tb_function | NULL    | ref | idx_create_time | idx_create_time | 4    | const |  3 |  100.00 | NULL |
+----+-------------+-------------+------------+------+-----------------+-----------------+---------+-------+------+----------+-------+
1 row in set, 1 warning (0.00 sec)

可見(jiàn),在MySQL8.0 創(chuàng)建對(duì)應(yīng)的函數(shù)索引后,不改變SQL寫(xiě)法的前提下,查詢的列上進(jìn)行對(duì)應(yīng)的函數(shù)計(jì)算后也可以走索引。

關(guān)于MySQL函數(shù)索引的優(yōu)化及MySQL8.0函數(shù)索引還可以有更多的場(chǎng)景進(jìn)行測(cè)試,建議大家多動(dòng)手試試,提高SQL改寫(xiě)及優(yōu)化的能力。

以上就是MySQL 函數(shù)索引的優(yōu)化方案的詳細(xì)內(nèi)容,更多關(guān)于MySQL 函數(shù)索引及優(yōu)化方案的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Mysql的longblob字段插入數(shù)據(jù)問(wèn)題解決

    Mysql的longblob字段插入數(shù)據(jù)問(wèn)題解決

    在使用mysql的過(guò)程中,有個(gè)問(wèn)題就是mysql的優(yōu)化,mysql中l(wèi)ongblob字段在5.5版本中默認(rèn)的為1M,需要解決問(wèn)題的朋友可以參考下
    2014-01-01
  • SQL性能優(yōu)化方法及性能測(cè)試

    SQL性能優(yōu)化方法及性能測(cè)試

    這篇文章主要介紹了SQL性能優(yōu)化方法及性能測(cè)試,文章圍繞主題展開(kāi)詳細(xì)內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-05-05
  • mysql 5.7.17 zip安裝配置教程 mysql啟動(dòng)失敗的解決方法

    mysql 5.7.17 zip安裝配置教程 mysql啟動(dòng)失敗的解決方法

    這篇文章主要為大家詳細(xì)介紹了mysql 5.7.17 zip安裝配置教程,以及mysql啟動(dòng)失敗的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • Linux系統(tǒng)徹底刪除Mysql的詳細(xì)教程

    Linux系統(tǒng)徹底刪除Mysql的詳細(xì)教程

    我們?cè)谥匦掳惭bMySQL、或更新MySQL版本時(shí),一定會(huì)遇到mysql數(shù)據(jù)殘留(臟數(shù)據(jù)),或組件沖突等問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于Linux系統(tǒng)徹底刪除Mysql的詳細(xì)教程,需要的朋友可以參考下
    2023-02-02
  • mysql?8.0.28?winx64.zip安裝配置方法圖文教程

    mysql?8.0.28?winx64.zip安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了mysql?8.0.28?winx64.zip安裝配置方法圖文教程,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 分享20個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)的最佳實(shí)踐

    分享20個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)的最佳實(shí)踐

    下面給出了20個(gè)數(shù)據(jù)庫(kù)設(shè)計(jì)最佳實(shí)踐,當(dāng)然,所謂最佳,還是要看它是否適合你的程序。一起來(lái)了解了解吧
    2014-06-06
  • mysql用戶管理操作實(shí)例分析

    mysql用戶管理操作實(shí)例分析

    這篇文章主要介紹了mysql用戶管理操作,結(jié)合實(shí)例形式分析了mysql用戶管理查看、創(chuàng)建、修改、刪除等相關(guān)操作技巧,需要的朋友可以參考下
    2020-04-04
  • 深入了解mysql索引

    深入了解mysql索引

    這篇文章主要介紹了mysql索引的相關(guān)資料,文中講解非常細(xì)致,幫助大家更好的理解和學(xué)習(xí)mysql,感興趣的朋友可以了解下
    2020-07-07
  • MySql總彈出mySqlInstallerConsole窗口的解決方法

    MySql總彈出mySqlInstallerConsole窗口的解決方法

    這篇文章主要介紹了MySql總彈出mySqlInstallerConsole窗口的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-09-09
  • MySQL SHOW 命令的使用介紹

    MySQL SHOW 命令的使用介紹

    MySQL SHOW 命令的使用介紹,使用mysql的朋友可以參考下。
    2011-08-08

最新評(píng)論

乳源| 明溪县| 佛坪县| 图们市| 石阡县| 隆德县| 阜南县| 长武县| 隆林| 砚山县| 肇庆市| 乳山市| 博白县| 繁昌县| 鄯善县| 郧西县| 武乡县| 浦北县| 五河县| 镇康县| 金寨县| 固原市| 芜湖市| 双柏县| 鄂托克前旗| 琼海市| 清水河县| 饶平县| 崇阳县| 永昌县| 布拖县| 林州市| 伊春市| 资兴市| 泗洪县| 汕尾市| 长武县| 土默特左旗| 永寿县| 长阳| 桃源县|