中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Mysql怎么適當的添加索引

發布時間:2021-02-05 11:43:58 來源:億速云 閱讀:292 作者:小新 欄目:MySQL數據庫

小編給大家分享一下Mysql怎么適當的添加索引,希望大家閱讀完這篇文章之后都有所收獲,下面讓我們一起去探討吧!

這里先簡單介紹一下索引:

添加索引是為了提高數據庫查詢性能,索引是最物美價廉的東西了,不用加內存,不用改程序,不用調sql,只要執行個正確的create index ,查詢的速度就可能提高百倍千倍,這可是有誘惑力的,可是天下沒有沒費的午餐,查詢的速度的提高是以犧牲insert update delete的速度為代價的。而且索引大小一般是數據的三分之一  ,再加上索引要加載進內存的,如果全部字段都加索引會以犧牲內存為代價的,所以才要設當的添加索引。

這里簡單介紹一下mysql中常用索引:

在添加索引之前最好先查看一下該表中已存在哪些索引:show index from 表名;

1、主鍵索引

注意: 主鍵索引一張表中只能有一個,但是可以添加多個索引 比如:唯一索引、普通索引、全文索引。

主鍵索引:一般在建表的時候就添加了 比如:id 一般是主鍵索引加自動遞增。

建表后添加主鍵索引 :alter table table_name add primary key (column name);

主鍵索引的特點:不能為空且唯一。

2、普通索引

創建普通索引: alter table table_name add index 索引名(column1,column2);

3、唯一索引

創建唯一索引:ALTER TABLE `table_name` ADD UNIQUE (`column`);

唯一索引與主鍵索引的區別:

唯一索引:可以有多個null 但數據內容不能重復

主鍵索引:不能為null,且內容只能唯一。

兩個區別就在于主鍵索引不能為null 唯一索引可以有多個null 其余都一樣。

4、全文索引

全文索引只有MyISAM有效(mysql5.6之后InnoDB也支持了全文索引)[5.7不支持MyISAM]

全文索引主要針對文本文件,比如文章、標題。

在創建表時創建全文索引:

CREATE TABLE `article` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
     `title` varchar(200) DEFAULT NULL,
 `    content` text,
      PRIMARY KEY (`id`),
      FULLTEXT KEY `title` (`title`,`content`)
      ) ENGINE=MyISAM(5.6之后InnoDB也支持全文索引 、5.7不支持MyISAM引擎) DEFAULT CHARSET=utf8;

在現有表中創建全文索引:

ALTER TABLE article ADD FULLTEXT INDEX fulltext_article(title,content);

創建完全文索引之后使用也有要注意的地方:

眾所周知在數據庫中進行模糊查詢是使用like關鍵字進行查詢的,例如:

SELECT * FROM article WHERE content LIKE ‘%查詢字符串%';

那么,我們在使用全文索引也這樣使用嗎?當然不是,我們必須使用特有的語法才能使用全文索引進行查詢,例如,我們想要在article表的title和content列中全文檢索指定的查詢字符串,我們可以如下編寫SQL語句:

SELECT * FROM article WHERE MATCH(title,content) AGAINST (‘查詢字符串');

強烈注意:MySql自帶的全文索引只能對英文進行全文檢索,目前無法對中文進行全文檢索。如果需要對包含中文在內的文本數據進行全文檢索,我們需要采用Sphinx(斯芬克斯)/Coreseek技術來處理中文。

注:目前,使用MySql自帶的全文索引時,如果查詢字符串的長度過短將無法得到期望的搜索結果。MySql全文索引所能找到的詞默認最小長度為4個字符。另外,如果查詢的字符串包含停止詞,那么該停止詞將會被忽略。

如果可能,請盡量先創建表并插入所有數據后再創建全文索引,而不要在創建表時就直接創建全文索引,因為前者比后者的全文索引效率要高。

刪除索引sql語句:alter table table_name drop index 索引名;

通過上面的簡單介紹后,那么應該在哪些字段上添加索引呢?

    1、 頻繁查詢的字段,應該創建索引。

    2、更新非常頻繁的字段,不應該創建索引。

    3、唯一性太差的字段,比如 gender字段,就不應該創建索引。

    4、不會出現在where條件之后的字段,不應該創建索引。

滿足一下條件,應該創建索引:

        1、頻繁要查詢的字段,經常出現在where條件后面的字段,應該創建索引。

        2、更新不頻繁的字段,可以創建索引。

索引使用的注意事項

    1.對于創建的多列索引,只要查詢條件使用了最左邊的列,索引一般就會被使用。

  •             比如我們對title,content 添加了復合索引

  •             select * from table_name where title = 'test';會用到索引

  •             select * from table_name where content = 'test';不會用到索引

    2.對于使用like的查詢,查詢如果是 ‘%a'不會使用到索引 ,而 like 'a%'就會用到索引。最前面不能使用%和_這樣的變化值

    3.如果條件中有or,即使其中有條件帶索引也不會使用。

    4.如果列類型是字符串,那一定要在條件中將數據使用引號引用起來。

  •         查看索引的使用情況:show status like‘Handler_read%';  

  •         handler_read_key:這個值越高越好,越高表示使用索引查詢到的次數。

  •         handler_read_rnd_next:這個值越高,說明查詢低效。

看完了這篇文章,相信你對“Mysql怎么適當的添加索引”有了一定的了解,如果想了解更多相關知識,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阳山县| 山东省| 台安县| 浪卡子县| 九寨沟县| 潍坊市| 临湘市| 虹口区| 迁西县| 宁蒗| 新安县| 天长市| 探索| 凭祥市| 海盐县| 威信县| 突泉县| 桂阳县| 黑河市| 连州市| 水城县| 迭部县| 崇礼县| 衡东县| 麻栗坡县| 三都| 大同市| 新沂市| 静安区| 上高县| 调兵山市| 霍林郭勒市| 钦州市| 田林县| 光山县| 徐汇区| 无极县| 罗甸县| 新乡县| 沙湾县| 凌源市|