IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置: 首頁數(shù)據(jù)庫MYSQL → 添加mysql索引的3條原則

添加mysql索引的3條原則

時(shí)間:2015-06-28 00:00:00 來源:IT貓撲網(wǎng) 作者:網(wǎng)管聯(lián)盟 我要評(píng)論(0)

  一,索引的重要性

  索引用于快速找出在某個(gè)列中有一特定值的行。不使用索引,MySQL必須從第1條記錄開始然后讀完整個(gè)表直到找出相關(guān)的行。表越大,花費(fèi)的時(shí)間越多。如果表中查詢的列有一個(gè)索引,MySQL能快速到達(dá)一個(gè)位置去搜尋到數(shù)據(jù)文件的中間,沒有必要看所有數(shù)據(jù)。注意如果你需要訪問大部分行,順序讀取要快得多,因?yàn)榇藭r(shí)我們避免磁盤搜索。

  假如你用新華字典來查找"張"這個(gè)漢字,不使用目錄的話,你可能要從新華字典的第一頁找到最后一頁,可能要花二個(gè)小時(shí)。字典越厚呢,你花的時(shí)間就越多?,F(xiàn)在你使用目錄來查找"張"這個(gè)漢字,張的首字母是z,z開頭的漢字從900多頁開始,有了這條線索,你查找一個(gè)漢字可能只要一分鐘,由此可見索引的重要性。但是索引建的是不是越多越好呢,當(dāng)然不是,如果一本書的目錄分成好幾級(jí)的話,我想你也會(huì)暈的。

  二,準(zhǔn)備工作

  1. //準(zhǔn)備二張測(cè)試表??? ?
  2. mysql>?CREATE?TABLE?`test_t`?(??? ?
  3. ?->???`id`?int(11)?NOT?NULL?auto_increment,??? ?
  4. ?->???`num`?int(11)?NOT?NULL?default?'0',??? ?
  5. ?->???`d_num`?varchar(30)?NOT?NULL?default?'0',??? ?
  6. ?->???PRIMARY?KEY??(`id`)??? ?
  7. ?->?)?ENGINE=MyISAM?DEFAULT?CHARSET=utf8?AUTO_INCREMENT=1?;??? ?
  8. Query?OK,?0?rows?affected?(0.05?sec)??? ?
  9. ?? ?
  10. mysql>?CREATE?TABLE?`test_test`?(??? ?
  11. ?->???`id`?int(11)?NOT?NULL?auto_increment,??? ?
  12. ?->???`num`?int(11)?NOT?NULL?default?'0',??? ?
  13. ?->???PRIMARY?KEY??(`id`)??? ?
  14. ?->?)?ENGINE=MyISAM??DEFAULT?CHARSET=utf8?AUTO_INCREMENT=1?;??? ?
  15. Query?OK,?0?rows?affected?(0.05?sec)????? ?
  16. ?? ?
  17. //創(chuàng)建一個(gè)存儲(chǔ)過程,為插數(shù)據(jù)方便??? ?
  18. mysql>?delimiter?|??? ?
  19. mysql>?create?procedure?i_test(pa?int(11),tab?varchar(30))??? ?
  20. ?->?begin??? ?
  21. ?->?????declare?max_num?int(11)?default?100000;??? ?
  22. ?->?????declare?i?int?default?0;??? ?
  23. ?->?????declare?rand_num?int;??? ?
  24. ?->??declare?double_num?char;??? ?
  25. ?->??? ?
  26. ?->??if?tab?!=?'test_test'?then??? ?
  27. ?->???select?count(id)?into?max_num?from?test_t;??? ?
  28. ?->???while?i?do?? ?
  29. ?->?if?max_num?
  30. ?->?????select?cast(rand()*100?as?unsigned)?into?rand_num;??? ?
  31. ?->?????select?concat(rand_num,rand_num)?into?double_num;??? ?
  32. ?->?????insert?into?test_t(num,d_num)values(rand_num,double_num);??? ?
  33. ?->?end?if;??? ?
  34. ?->?set?i?=?i?+1;??? ?
  35. ?->???end?while;??? ?
  36. ?->??else?? ?
  37. ?->???select?count(id)?into?max_num?from?test_test;??? ?
  38. ?->???while?i?do?? ?
  39. ?->?if?max_num?
  40. ?->?????select?cast(rand()*100?as?unsigned)?into?rand_num;??? ?
  41. ?->?????insert?into?test_test(num)values(rand_num);??? ?
  42. ?->?end?

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門文章 Xbox Game Pass Xbox Game Pass 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 MySQL常用維護(hù)管理工具 MySQL常用維護(hù)管理工具 MySQL數(shù)據(jù)庫啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) MySQL數(shù)據(jù)庫啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié)

相關(guān)下載

人氣排行 10款MySQL數(shù)據(jù)庫客戶端圖形界面管理工具推薦 MySQL數(shù)據(jù)庫啟動(dòng)失敗1067進(jìn)程意外終止的解決辦法總結(jié) Mysql 1045錯(cuò)誤解決辦法 MySQL服務(wù)器進(jìn)程CPU占用100%解決辦法 MySQL導(dǎo)出導(dǎo)入命令的用例 MySQL連接字符串的實(shí)際操作步驟匯總 MySQL無法啟動(dòng)、無法停止各種解決方法總結(jié) 三種常用的MySQL建表語句