Wednesday, July 28, 2010

Wteps you will take to improve performance of a poor performing query


This is a very open ended question and there could be a lot of reasons behind the poor performance of a query. But some general issues that you could talk about would be:

No indexes,

Table scans,

Missing or out of date statistics,

Blocking,

Excess recompilations of stored procedures,

Procedures and triggers without SET NOCOUNT ON,

Poorly written query with unnecessarily complicated joins,

Too much normalization,

Excess usage of cursors and temporary tables.

Some of the tools/ways that help you troubleshooting performance problems are:

SET SHOWPLAN_ALL ON,

SET SHOWPLAN_TEXT ON,

SET STATISTICS IO ON,

SQL Server Profiler,

Windows NT /2000 Performance monitor,

Graphical execution plan in Query Analyzer.

Download the white paper on performance tuning SQL Server from Microsoft web site.


10 things you can do with Office 2010 Web Apps



The Office 2010 Web Apps help create a seamless experience for you whether you are working at your desk, using your Windows-mobile smartphone at a coffeeshop, or toting your laptop from place to place. By saving your Office 2010 files to the Web, you can access and edit them using familiar tools. Here's an introductory look at some things you can do with Office 2010 Web Apps.


1: Add files to Office 2010 Web Apps

The process of adding files to your Office 2010 Web Apps is pretty simple. First, you need a (free) Windows Live account, and you need to be a registered user of one of the Office 2010 versions. You can then log in. When the first window appears, click Add Files to choose the files you want to upload to the Web space.

2: Work on Office files from anywhere

Once a file is in your Windows Live SkyDrive account, you can open it, edit it, enhance it, and share it easily. The tools are almost identical to those you use in your desktop version of Office 2010 (some applications have fewer tools than the full program offers), and the program features work in the same way. Hover the mouse over the file you want and click Edit In Browser to begin working with the file online.

3: Create a new file

Not only can you add and edit files you've created on a desktop system, but you can also create new files in the Web Apps for Word, Excel, PowerPoint, and OneNote. After you log in to your Windows Live SkyDrive account, click the icon of the file you want to create on the right side of the browser window. You will be prompted to name and save the file. The program opens, displaying a new document, and you can choose a template, add content, and save and share the file as you ordinarily would (Figure A).

Figure A

You can add, edit, and enhance content in the Office 2010 Web Apps.

4: Use the Windows Live Sign-In Assistant

Windows Live offers a utility that signs you in automatically so that you don't have to stop and log in each time you want to work with your Office 2010 Web App files. You will be prompted to install the Sign-In Assistant the first time you open a file in the Office 2010 Web Apps. Just click the link provided to start a wizard that walks you through the process of downloading and installing the tool.

5: Give users permission to share your files

The user permissions features in Windows Live SkyDrive lets you share your files with others. Create a folder to store the file by clicking New and choosing Folder. Add a name for the folder and click the Change link in the Share With selection (Figure B). Add the email addresses of those you want to share the file with or click Select From Your Contact List to display all your Windows Live contacts so that you can click the users you want to add. For each user, choose whether you want to assign the permissions that enable that person to add, edit, and delete files or simply view the files in the folder. Click Next to save your changes. The users you specified will be able to access the files you add to the folder you just created.

Figure B

You can share your folder and files with others in Windows Live SkyDrive.

6: Work collaboratively online

The Office 2010 Web Apps, including Word, PowerPoint, OneNote, and Excel, enable you to work online with others in real time. When you have given a user the necessary permissions for the file, the Office Web App lets you know when others are working with you in the file. You can click the lower-right corner of the status bar to display the list of others working in the file (Figure C).

Figure C

You can collaborative in real time in the Office 2010 Web Apps.

7: Download a file

You can move files from the online environment to your desktop and back. Hover the mouse over a file in the list in SkyDrive, click More, and then choose Download. You will be prompted to choose the folder where you want to store the file. While you're working in a file in one of the Office Web Apps, you can click the File tab and choose the first option (which in Excel, for example, is Open In Excel) to open the file in your desktop application. When you save and close the file, any changes are synchronized with the online version.

8: Grab a snapshot of a workbook

If you want to download only a portion of the file you're working on, you can click the File tab (in the Excel Web App) and choose Download A Snapshot. This downloads a copy of the workbook to your computer that includes only the values and the formatting so you can review the workbook as needed.

9: Get more room onscreen

Similar to the Ribbon controls in your desktop version of Office 2010, you can hide the Ribbon in the Office Web Apps by clicking the Minimize The Ribbon button on the far right side of the Ribbon. Return the Ribbon to normal display by clicking the Maximize The Ribbon button. In Word, you can also click the View tab and choose Reading View to hide the Ribbon and show the document in full-screen view. To return to editing the document, click Edit In Browser.

10: Share your thoughts

Because the Office Web Apps are new, your feedback is especially important for helping developers fine-tune the workings of the programs. You can send feedback to Microsoft about your experience with the Web Apps by clicking the File tab and clicking Give Feedback. A Web form is displayed so that you can send comments (with or without your e-mail address). Whether your experience has been good or bad so far, sharing your experience will help improve the service for all users — so don't hold back.


Five tips for mentoring entry-level developers


If your organization is starting or revamping a mentorship program, the following tips can help. But it's important to note that not every senior developer makes a good mentor, and there's no shame in knowing your limitations. If you don't think you can fully commit to being a good mentor, or you don't think you have the necessary skills or traits to be one, say something. It's better to admit that you aren't cut out for the task than to force yourself to do it and waste time and probably alienate a promising new employee.

1: Make mentoring a priority

I think the key ingredient in a successful mentoring relationship is giving the relationship priority above anything other than an emergency. The inability to give the relationship priority is what makes true mentoring scenarios so rare. If you don't make the mentorship a priority, new hires quickly sense they're not important. They also quickly figure out that when they go to you for help, they're slowing you down from attending to your "real" priorities. The result? They don't come to you for help, and they try to do things on their own. Basically, you're no longer their mentor.

2: Have a road map

I've seen a number of mentoring programs sink because there is no plan. Someone is hired, and a more experienced developer is assigned to show that person the ropes. The experienced developer wasn't told about this new mentoring role until 9:05 AM on the new hire's first day. The would-be mentor takes the new hire on a tour of the building and introduces him or her to a few other teams — and that's the extent of "the ropes." The only thing the new employee usually learns is where to find the kitchen. You need to have a game plan with set goals (for the new hire and for the mentor) and a list of topics to cover; otherwise, you'll both feel lost and give up before you even start.

3: Be tolerant of mistakes

Working with entry-level developers can be frustrating. They are not familiar with writing code in a real-world environment with version control, unit tests, and automated build tools. Also, they may have been taught outdated habits by a professor who last worked on actual code in 1987. Often, entry-level developers don't realize that the way they were taught to approach a problem may not be the only choice. But if your reaction to mistakes is to treat the new developers like they're stupid or to blame (even if they are being stupid or are truly at fault), they probably won't respond well and won't be working with you much longer.

4: Assign appropriate projects

One of the worst things you can do is throw entry-level programmers at an extremely complex project, forcing them to sink or swim. Chances are, they'll sink. Even worse, they'll add this project to their resume and run out of there as fast as they can just to get away from you. On the other hand, don't create busywork for them. Let them work on nagging issues in current products or internal projects you never seem to have time to address. Once you gain confidence about what they can accomplish, you can assign a more difficult project.

5. Give and accept feedback

You can't successfully navigate a ship in the middle of an ocean without a compass. Likewise, new employees will not achieve the goal of becoming a productive member of the team without knowing where they've been and where they're going. This means you need to give feedback on a regular basis, and the feedback needs to be appropriate. For instance, being sarcastic to someone who made an honest mistake is not helpful. Feedback has to be a two-way street as well. You need to listen to find out what their concerns and questions are, and address them.

Rewarding experiences

If you're considering being a mentor, these relationships can be very rewarding. I hope these tips will help you the next time an entry-level developer is assigned to your department.


Saturday, July 24, 2010

Comparing dates without times in SQL Server


Sometimes you have the need in an application to compare dates without the time component. For example, a user signs up for a free 30-day trial of a client's site. The user's 'expire_date' will be set for 30 days from today, probably using something like DateAdd("d",30,getdate()). At some point you need to compare the expire_date against the current date. Maybe its a report of current free trial users, or a query to see if the user is allowed to login. Your query will look something like

... WHERE expire_date >= getdate()

The problem with this is that both values contain a time component. What you are really comparing is something like

... WHERE 2007-1-20 10:44:22.717 >= 2007-1-20 10:30:28.287

So a user may be considered still in their free trial at 10:30am, but when they try to login again 20 minutes later, they may be told their trial has expired. In reality the free trial should continue throughout the last day of the trial period. If you signed up for a free two week gym membership, would you expect to be allowed in before lunch on the last day but not after because of what time you initially signed up?

This is not a problem in MySQL, as it has a simple DATE type (in addition to the common DATETIME type) that does not store any time data. So what we need to do in SQL Server is strip off the time component. I typically do this when I store the date, but you could do it at compare time, too.

SQL Server datetimes are stored internally as floating point numbers. You can see this by CASTing the value of getdate to a float.

SELECT CAST( getdate() AS float)

When I ran this just now I got 39100.964272067904. That indicates 39100 days after 1/1/1900 (SQL Server's base date), and 96/100ths of a fractional day (it's almost midnight). We can use this to modify the float value and then CAST it back as a datetime type. The FLOOR function will strip off any decimal portion of a number. Thus:

SELECT CAST(FLOOR(CAST( getdate() AS float)) AS datetime)

returns "2007-01-20 00:00:00.000″ – the date without the time.

There are other ways to do this, using the day, month and year functions or the CONVERT function. I find the above method to be more straight forward (although only by a little – its a pain no matter how you do it). You could add that code to a trigger so whenever that field is set or updated the time portion is automatically stripped off.

Now when we compare the field, we'll need to do the same conversion to the current day:

... WHERE expire_date >= CAST(FLOOR(CAST( getdate() AS float)) AS datetime)

Keep in mind that queries with functions in the search condition are expensive. If you are going to run this often or on a lot of data, you may want to pass in the date from your application language:

... WHERE expire_date >= '2007-01-20'


Top Countries Ranked by Internet Speed Year 2010

Download Speed

1

South Korea

31.60 Mb/s

2

Latvia

23.74 Mb/s

3

Netherlands

22.66 Mb/s

4

Aland Islands

22.22 Mb/s

5

Republic of Moldova

21.73 Mb/s

6

Lithuania

21.61 Mb/s

7

Romania

20.47 Mb/s

8

Sweden

17.64 Mb/s

9

Japan

17.63 Mb/s

10

Bulgaria

16.29 Mb/s

11

Switzerland

15.33 Mb/s

12

Germany

14.69 Mb/s

13

Portugal

14.54 Mb/s

14

Denmark

13.58 Mb/s

15

Iceland

13.33 Mb/s

16

Belgium

12.59 Mb/s

17

Andorra

12.58 Mb/s

18

Austria

11.89 Mb/s

19

France

11.84 Mb/s

20

Hungary

11.63 Mb/s

21

Kyrgyzstan

11.52 Mb/s

22

Czech Republic

11.18 Mb/s

23

Finland

11.00 Mb/s

24

Ukraine

10.90 Mb/s

25

Slovakia

10.69 Mb/s

26

Russia

10.52 Mb/s

27

Norway

9.78 Mb/s

28

United States

9.76 Mb/s

29

Luxembourg

8.93 Mb/s

30

Monaco

8.85 Mb/s

31

Estonia

8.85 Mb/s

32

Canada

8.49 Mb/s

33

Slovenia

8.35 Mb/s

34

Taiwan

7.85 Mb/s

35

United Kingdom

7.81 Mb/s

36

Australia

7.21 Mb/s

37

Mongolia

7.19 Mb/s

38

Poland

7.18 Mb/s

39

Greece

7.01 Mb/s

40

Kazakstan

6.60 Mb/s

41

Isle of Man

6.42 Mb/s

42

New Zealand

6.26 Mb/s

43

Ghana

6.16 Mb/s

44

Georgia

6.08 Mb/s

45

Singapore

5.89 Mb/s

46

Spain

5.85 Mb/s

47

Malta

5.84 Mb/s

48

Macedonia

5.77 Mb/s

49

Ireland

5.73 Mb/s

50

Greenland

5.49 Mb/s

51

Liechtenstein

5.45 Mb/s

52

Chile

5.29 Mb/s

53

Jamaica

5.22 Mb/s

54

Turkey

5.17 Mb/s

55

Faroe Islands

5.15 Mb/s

56

Croatia

5.14 Mb/s

57

San Marino

5.01 Mb/s

58

Jersey

4.84 Mb/s

59

Trinidad and Tobago

4.72 Mb/s

60

Israel

4.66 Mb/s

61

Philippines

4.60 Mb/s

62

Italy

4.59 Mb/s

63

Maldives

4.54 Mb/s

64

Thailand

4.46 Mb/s

65

United Arab Emirates

4.41 Mb/s

66

Vietnam

4.11 Mb/s

67

Aruba

4.08 Mb/s

68

Macau

4.04 Mb/s

69

Montenegro

4.04 Mb/s

70

Belarus

3.96 Mb/s

71

China

3.76 Mb/s

72

Brazil

3.74 Mb/s

73

Saudi Arabia

3.69 Mb/s

74

Guernsey

3.51 Mb/s

75

Bermuda

3.35 Mb/s

76

Cyprus

3.31 Mb/s

77

Guam

3.12 Mb/s

78

Qatar

3.03 Mb/s

79

Grenada

2.88 Mb/s

80

Serbia

2.85 Mb/s

81

Martinique

2.82 Mb/s

82

Uganda

2.77 Mb/s

83

Azerbaijan

2.77 Mb/s

84

Bahamas

2.74 Mb/s

85

Kuwait

2.67 Mb/s

86

Cayman Islands

2.50 Mb/s

87

Tunisia

2.49 Mb/s

88

Costa Rica

2.49 Mb/s

89

Rwanda

2.42 Mb/s

90

Armenia

2.39 Mb/s

91

Malaysia

2.32 Mb/s

92

Albania

2.31 Mb/s

93

South Africa

2.30 Mb/s

94

Tanzania

2.26 Mb/s

95

Cape Verde

2.23 Mb/s

96

Bosnia and Herzegovina

2.22 Mb/s

97

Morocco

2.19 Mb/s

98

Guadeloupe

2.18 Mb/s

99

Puerto Rico

2.15 Mb/s

100

Mexico

2.15 Mb/s

101

St. Vincent and Grenadines

2.13 Mb/s

102

Bahrain

2.10 Mb/s

103

Panama

2.10 Mb/s

104

Gibraltar

2.09 Mb/s

105

Nicaragua

2.03 Mb/s

106

Argentina

1.98 Mb/s

107

Mozambique

1.97 Mb/s

108

Netherlands Antilles

1.96 Mb/s

109

Libyan Arab Jamahiriya

1.95 Mb/s

110

Mali

1.89 Mb/s

111

Barbados

1.89 Mb/s

112

Saint Kitts and Nevis

1.89 Mb/s

113

New Caledonia

1.87 Mb/s

114

Dominica

1.86 Mb/s

115

Antigua and Barbuda

1.85 Mb/s

116

French Guiana

1.84 Mb/s

117

Anguilla

1.81 Mb/s

118

Saint Lucia

1.79 Mb/s

119

Reunion

1.70 Mb/s

120

Jordan

1.66 Mb/s

121

Namibia

1.66 Mb/s

122

Colombia

1.65 Mb/s

123

Uzbekistan

1.65 Mb/s

124

Kenya

1.62 Mb/s

125

Honduras

1.61 Mb/s

126

U.S. Virgin Islands

1.60 Mb/s

127

Senegal

1.54 Mb/s

128

British Virgin Islands

1.53 Mb/s

129

Uruguay

1.51 Mb/s

130

Ecuador

1.50 Mb/s

131

Syrian Arab Republic

1.42 Mb/s

132

India

1.29 Mb/s

133

Algeria

1.24 Mb/s

134

Pakistan

1.23 Mb/s

135

Indonesia

1.22 Mb/s

136

Palestinian Territory

1.22 Mb/s

137

Paraguay

1.21 Mb/s

138

Cambodia

1.19 Mb/s

139

Sri Lanka

1.17 Mb/s

140

Tajikistan

1.17 Mb/s

141

Laos

1.14 Mb/s

142

Egypt

1.13 Mb/s

143

Botswana

1.11 Mb/s

144

Haiti

1.05 Mb/s

145

Papua New Guinea

1.02 Mb/s

146

Fiji

1.02 Mb/s

147

Peru

1.00 Mb/s

148

Brunei Darussalam

1.00 Mb/s

149

Oman

0.98 Mb/s

150

Bangladesh

0.95 Mb/s

151

Mauritania

0.92 Mb/s

152

Northern Mariana Islands

0.83 Mb/s

153

Sudan

0.80 Mb/s

154

Venezuela

0.78 Mb/s

155

Dominican Republic

0.78 Mb/s

156

Iraq

0.76 Mb/s

157

Burkina Faso

0.75 Mb/s

158

Turks and Caicos Islands

0.73 Mb/s

159

Madagascar

0.73 Mb/s

160

Yemen

0.68 Mb/s

161

Belize

0.66 Mb/s

162

Angola

0.66 Mb/s

163

Gabon

0.64 Mb/s

164

Guyana

0.63 Mb/s

165

Islamic Republic of Iran

0.60 Mb/s

166

Ethiopia

0.60 Mb/s

167

Cote D'Ivoire

0.57 Mb/s

168

El Salvador

0.56 Mb/s

169

Lebanon

0.55 Mb/s

170

Mauritius

0.54 Mb/s

171

Suriname

0.53 Mb/s

172

Nigeria

0.53 Mb/s

173

French Polynesia

0.53 Mb/s

174

Afghanistan

0.52 Mb/s

175

Guatemala

0.52 Mb/s

176

Cameroon

0.47 Mb/s

177

Bolivia

0.47 Mb/s

178

Nepal

0.37 Mb/s

179

Zimbabwe

0.34 Mb/s

180

Zambia

0.26 Mb/s

Upload Speed

1

South Korea

18.86 Mb/s

2

Lithuania

13.28 Mb/s

3

Latvia

12.63 Mb/s

4

Aland Islands

11.21 Mb/s

5

Andorra

9.91 Mb/s

6

Republic of Moldova

9.07 Mb/s

7

Japan

8.74 Mb/s

8

Romania

8.45 Mb/s

9

Bulgaria

8.32 Mb/s

10

Kyrgyzstan

7.83 Mb/s

11

Ghana

7.35 Mb/s

12

Iceland

6.91 Mb/s

13

Sweden

6.83 Mb/s

14

Denmark

6.51 Mb/s

15

Russia

5.89 Mb/s

16

Mongolia

5.03 Mb/s

17

Ukraine

4.90 Mb/s

18

Czech Republic

4.81 Mb/s

19

Netherlands

4.74 Mb/s

20

Greenland

4.68 Mb/s

21

Norway

3.85 Mb/s

22

Hungary

3.58 Mb/s

23

Slovakia

3.36 Mb/s

24

Georgia

3.05 Mb/s

25

Estonia

2.82 Mb/s

26

Switzerland

2.66 Mb/s

27

Slovenia

2.56 Mb/s

28

United States

2.52 Mb/s

29

Philippines

2.50 Mb/s

30

Kazakstan

2.48 Mb/s

31

France

2.45 Mb/s

32

Qatar

2.05 Mb/s

33

Luxembourg

2.03 Mb/s

34

Germany

2.03 Mb/s

35

Faroe Islands

2.02 Mb/s

36

Finland

1.99 Mb/s

37

China

1.98 Mb/s

38

Austria

1.93 Mb/s

39

Taiwan

1.89 Mb/s

40

Poland

1.89 Mb/s

41

Uganda

1.82 Mb/s

42

Jamaica

1.82 Mb/s

43

Belarus

1.74 Mb/s

44

Portugal

1.71 Mb/s

45

Monaco

1.67 Mb/s

46

Jersey

1.61 Mb/s

47

Rwanda

1.61 Mb/s

48

Macedonia

1.56 Mb/s

49

New Zealand

1.53 Mb/s

50

Vietnam

1.45 Mb/s

51

Canada

1.41 Mb/s

52

Belgium

1.41 Mb/s

53

Bermuda

1.40 Mb/s

54

Turkey

1.39 Mb/s

55

Chile

1.30 Mb/s

56

Singapore

1.27 Mb/s

57

Thailand

1.27 Mb/s

58

Armenia

1.14 Mb/s

59

Tanzania

1.10 Mb/s

60

Azerbaijan

1.08 Mb/s

61

Honduras

1.08 Mb/s

62

United Kingdom

1.07 Mb/s

63

Australia

1.06 Mb/s

64

Guam

1.05 Mb/s

65

Ireland

1.01 Mb/s

66

Albania

1.01 Mb/s

67

San Marino

0.99 Mb/s

68

Macau

0.97 Mb/s

69

Liechtenstein

0.97 Mb/s

70

Tunisia

0.95 Mb/s

71

Kuwait

0.94 Mb/s

72

Italy

0.92 Mb/s

73

Serbia

0.85 Mb/s

74

Croatia

0.84 Mb/s

75

U.S. Virgin Islands

0.83 Mb/s

76

Bahamas

0.83 Mb/s

77

Malaysia

0.83 Mb/s

78

Spain

0.83 Mb/s

79

Ecuador

0.82 Mb/s

80

Cambodia

0.82 Mb/s

81

Aruba

0.82 Mb/s

82

Laos

0.81 Mb/s

83

Bangladesh

0.80 Mb/s

84

Kenya

0.80 Mb/s

85

Trinidad and Tobago

0.78 Mb/s

86

South Africa

0.78 Mb/s

87

Greece

0.75 Mb/s

88

Antigua and Barbuda

0.74 Mb/s

89

St. Vincent and Grenadines

0.74 Mb/s

90

Nicaragua

0.73 Mb/s

91

Cyprus

0.73 Mb/s

92

Bosnia and Herzegovina

0.73 Mb/s

93

Mozambique

0.73 Mb/s

94

Netherlands Antilles

0.72 Mb/s

95

Brazil

0.71 Mb/s

96

Israel

0.70 Mb/s

97

Malta

0.70 Mb/s

98

Maldives

0.69 Mb/s

99

Paraguay

0.68 Mb/s

100

Cayman Islands

0.67 Mb/s

101

Uzbekistan

0.67 Mb/s

102

Saint Lucia

0.67 Mb/s

103

Montenegro

0.67 Mb/s

104

Isle of Man

0.67 Mb/s

105

India

0.66 Mb/s

106

Costa Rica

0.65 Mb/s

107

Namibia

0.63 Mb/s

108

Panama

0.62 Mb/s

109

Libyan Arab Jamahiriya

0.61 Mb/s

110

Anguilla

0.61 Mb/s

111

United Arab Emirates

0.60 Mb/s

112

Palestinian Territory

0.58 Mb/s

113

Puerto Rico

0.57 Mb/s

114

Jordan

0.56 Mb/s

115

Saudi Arabia

0.56 Mb/s

116

Saint Kitts and Nevis

0.56 Mb/s

117

Mali

0.54 Mb/s

118

Mexico

0.52 Mb/s

119

Guatemala

0.52 Mb/s

120

Gibraltar

0.51 Mb/s

121

Argentina

0.51 Mb/s

122

Haiti

0.49 Mb/s

123

Grenada

0.46 Mb/s

124

Barbados

0.46 Mb/s

125

Pakistan

0.45 Mb/s

126

Bahrain

0.45 Mb/s

127

Papua New Guinea

0.45 Mb/s

128

Syrian Arab Republic

0.44 Mb/s

129

Martinique

0.42 Mb/s

130

New Caledonia

0.42 Mb/s

131

Turks and Caicos Islands

0.40 Mb/s

132

Colombia

0.40 Mb/s

133

Algeria

0.40 Mb/s

134

Indonesia

0.39 Mb/s

135

British Virgin Islands

0.39 Mb/s

136

Guadeloupe

0.38 Mb/s

137

Dominica

0.38 Mb/s

138

Guernsey

0.37 Mb/s

139

Uruguay

0.35 Mb/s

140

El Salvador

0.34 Mb/s

141

Venezuela

0.33 Mb/s

142

Dominican Republic

0.32 Mb/s

143

Fiji

0.31 Mb/s

144

Reunion

0.29 Mb/s

145

French Guiana

0.29 Mb/s

146

Afghanistan

0.29 Mb/s

147

Cote D'Ivoire

0.29 Mb/s

148

Belize

0.29 Mb/s

149

Sri Lanka

0.28 Mb/s

150

Senegal

0.28 Mb/s

151

Morocco

0.27 Mb/s

152

Botswana

0.27 Mb/s

153

Tajikistan

0.26 Mb/s

154

Ethiopia

0.24 Mb/s

155

Cape Verde

0.24 Mb/s

156

Egypt

0.24 Mb/s

157

Northern Mariana Islands

0.24 Mb/s

158

Brunei Darussalam

0.23 Mb/s

159

Mauritania

0.22 Mb/s

160

Nigeria

0.22 Mb/s

161

Burkina Faso

0.21 Mb/s

162

Iraq

0.20 Mb/s

163

Gabon

0.20 Mb/s

164

Guyana

0.20 Mb/s

165

Sudan

0.19 Mb/s

166

Islamic Republic of Iran

0.19 Mb/s

167

Peru

0.18 Mb/s

168

Nepal

0.18 Mb/s

169

Bolivia

0.18 Mb/s

170

Suriname

0.16 Mb/s

171

Cameroon

0.15 Mb/s

172

Mauritius

0.14 Mb/s

173

Oman

0.14 Mb/s

174

Angola

0.14 Mb/s

175

Yemen

0.14 Mb/s

176

Zimbabwe

0.13 Mb/s

177

Lebanon

0.10 Mb/s

178

Madagascar

0.07 Mb/s

179

French Polynesia

0.06 Mb/s

180

Zambia

0.03 Mb/s